Completed
Push — develop ( ddf816...398a4f )
by Zack
24:58 queued 11:44
created

Legacy_Context::push()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 1
dl 0
loc 4
ccs 4
cts 4
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
namespace GV\Mocks;
3
4
/**
5
 * This file contains mock code for deprecated functions.
6
 */
7
8
/**
9
 * @see \GravityView_View_Data::add_view
10
 * @internal
11
 * @since 2.0
12
 *
13
 * @return array|false The old array data, or false on error.
14
 */
15
function GravityView_View_Data_add_view( $view_id, $atts, $_this ) {
16
	/** Handle array of IDs. */
17
	if ( is_array( $view_id ) ) {
18
		foreach ( $view_id as $id ) {
19
			call_user_func( __FUNCTION__, $id, $atts, $_this );
20
		}
21
22
		if ( ! $_this->views->count() ) {
23
			return array();
24
		}
25
26
		return array_combine(
27
			array_map( function( $view ) { return $view->ID; }, $_this->views->all() ),
28
			array_map( function( $view ) { return $view->as_data(); }, $_this->views->all() )
29
		);
30
	}
31
32
	/** View has been set already. */
33
	if ( $view = $_this->views->get( $view_id ) ) {
34
		do_action( 'gravityview_log_debug', sprintf( 'GravityView_View_Data[add_view] Returning; View #%s already exists.', $view_id ) );
35
		return $view->as_data();
36
	}
37
38
	$view = \GV\View::by_id( $view_id );
39
	if ( ! $view ) {
40
		do_action( 'gravityview_log_debug', sprintf( 'GravityView_View_Data[add_view] Returning; View #%s does not exist.', $view_id ) );
41
		return false;
42
	}
43
44
	/** Doesn't have a connected form. */
45
	if ( ! $view->form ) {
46
		do_action( 'gravityview_log_debug', sprintf( 'GravityView_View_Data[add_view] Returning; Post ID #%s does not have a connected form.', $view_id ) );
47
		return false;
48
	}
49
50
	/** Update the settings */
51
	if ( is_array( $atts ) ) {
52
		$view->settings->update( $atts );
53
	}
54
55
	$_this->views->add( $view );
56
57
	return $view->as_data();
0 ignored issues
show
Deprecated Code introduced by
The method GV\View::as_data() has been deprecated.

This method has been deprecated.

Loading history...
58
}
59
60
/**
61
 * @see \GravityView_frontend::get_view_entries
62
 * @internal
63
 * @since 2.0
64
 *
65
 * @return array The old associative array data as returned by
66
 *  \GravityView_frontend::get_view_entries(), the paging parameters
67
 *  and a total count of all entries.
68
 */
69
function GravityView_frontend_get_view_entries( $args, $form_id, $parameters, $count ) {
70 2
	$form = \GV\GF_Form::by_id( $form_id );
71
72
	/**
73
	 * Kick off all advanced filters.
74
	 *
75
	 * Parameters and criteria are pretty much the same thing here, just
76
	 *  different naming, where `$parameters` are the initial parameters
77
	 *  calculated for hte view, and `$criteria` are the filtered ones
78
	 *  retrieved via `GVCommon::calculate_get_entries_criteria`.
79
	 */
80 2
	$criteria = \GVCommon::calculate_get_entries_criteria( $parameters, $form->ID );
81
82 2
	do_action( 'gravityview_log_debug', '[gravityview_get_entries] Final Parameters', $criteria );
83
84
	/** ...and all the (now deprectated) filters that usually follow `gravityview_get_entries` */
85
86
	/**
87
	 * @deprecated
88
	 * Do not use this filter anymore.
89
	 */
90 2
	$entries = apply_filters_ref_array( 'gravityview_before_get_entries', array( null, $criteria, $parameters, &$count ) );
91
92 2
	if ( ! is_null( $entries ) ) {
93
		/**
94
		 * We've been given an entries result that we can return,
95
		 *  just set the paging and we're good to go.
96
		 */
97 2
		$paging = \GV\Utils::get( $parameters, 'paging' );
98
	} else {
99 2
		$entries = new \GV\Entry_Collection();
100 2
		if ( $view = \GV\View::by_id( \GV\Utils::get( $args, 'id' ) ) ) {
101 2
			$view->settings->update( $args );
102 2
			$entries = $view->get_entries( gravityview()->request );
103
		}
104
105 2
		$page = \GV\Utils::get( $parameters['paging'], 'current_page' ) ?
106 2
			: ( ( ( $parameters['paging']['offset'] - $view->settings->get( 'offset' ) ) / $parameters['paging']['page_size'] ) + 1 );
107
108
		/** Set paging, count and unwrap the entries. */
109
		$paging = array(
110 2
			'offset' => ( $page - 1 ) * $view->settings->get( 'page_size' ),
111 2
			'page_size' => $view->settings->get( 'page_size' ),
112
		);
113
		/**
114
		 * GF_Query does not subtract the offset, we have to subtract it ourselves.
115
		 */
116 2
		$count = $entries->total() - ( gravityview()->plugin->supports( \GV\Plugin::FEATURE_GFQUERY ) ? $view->settings->get( 'offset' ) : 0 );
117
		$entries = array_map( function( $e ) { return $e->as_entry(); }, $entries->all() );
118
	}
119
120
	/** Just one more filter, for compatibility's sake! */
121
122
	/**
123
	 * @deprecated
124
	 * Do not use this filter anymore.
125
	 */
126 2
	$entries = apply_filters_ref_array( 'gravityview_entries', array( $entries, $criteria, $parameters, &$count ) );
127
128 2
	return array( $entries, $paging, $count );
129
}
130
131
/**
132
 * The old function does a bit too much, not only does it retrieve
133
 *  the value for a field, but it also renders some output. We are
134
 *  stubbing the plain value part of it, the rendering will follow once
135
 *  our field renderers are ready.
136
 *
137
 * @see \GravityView_API::field_value
138
 * @deprecated Use \GV\Field_Template::render()
139
 * @internal
140
 * @since 2.0
141
 *
142
 * @return null|string The value of a field in an entry.
143
 */
144
function GravityView_API_field_value( $entry, $field_settings, $format ) {
0 ignored issues
show
Unused Code introduced by
The parameter $format is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
145 3
	if ( empty( $entry['form_id'] ) || empty( $field_settings['id'] ) ) {
146 1
		gravityview()->log->error( 'No entry or field_settings[id] supplied', array( 'data' => array( func_get_args() ) ) );
147 1
		return null;
148
	}
149
150 3
	if ( ! empty( $entry['_multi'] ) && ! empty( $field_settings['form_id'] ) && ! empty( $entry['_multi'][ $field_settings['form_id'] ] ) ) {
151 2
		$multientry = \GV\Multi_Entry::from_entries( array_map( '\GV\GF_Entry::from_entry', $entry['_multi'] ) );
152 2
		$entry = $entry['_multi'][ $field_settings['form_id'] ];
153
	}
154
155 3
	if ( empty( $entry['id'] ) || ! $entry = \GV\GF_Entry::by_id( $entry['id'] ) ) {
156
		gravityview()->log->error( 'Invalid \GV\GF_Entry supplied', array( 'data' => $entry ) );
157
		return null;
158
	}
159
160
	/**
161
	 * Determine the source backend.
162
	 *
163
	 * Fields with a numeric ID are Gravity Forms ones.
164
	 */
165 3
	$source = is_numeric( $field_settings['id'] ) ? \GV\Source::BACKEND_GRAVITYFORMS : \GV\Source::BACKEND_INTERNAL;;
166
167
	/** Initialize the future field. */
168
	switch ( $source ):
169
		/** The Gravity Forms backend. */
170 3
		case \GV\Source::BACKEND_GRAVITYFORMS:
171 3
			if ( ! $form = \GV\GF_Form::by_id( $entry['form_id'] ) ) {
172
				gravityview()->log->error( 'No form Gravity Form found for entry', array( 'data' => $entry ) );
173
				return null;
174
			}
175
176 3
			if ( ! $field = $form::get_field( $form, $field_settings['id'] ) ) {
177
				return null;
178
			}
179
180 3
			break;
181
182
		/** Our internal backend. */
183 3
		case \GV\Source::BACKEND_INTERNAL:
184 3
			if ( ! $field = \GV\Internal_Source::get_field( $field_settings['id'] ) ) {
185
				return null;
186
			}
187
188 3
			break;
189
190
		/** An unidentified backend. */
191
		default:
192
			gravityview()->log->error( 'Could not determine source for entry', array( 'data' => array( func_get_args() ) ) );
193
			return null;
194
	endswitch;
195
196
	/** Add the field settings. */
197 3
	$field->update_configuration( $field_settings );
198
199 3
	$renderer = new \GV\Field_Renderer();
200 3
	return $renderer->render( $field, gravityview()->views->get(), $source == \GV\Source::BACKEND_GRAVITYFORMS ? $form : null, isset( $multientry ) ? $multientry : $entry, gravityview()->request );
0 ignored issues
show
Documentation introduced by
The property views does not exist on object<GV\Core>. 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...
Bug introduced by
The variable $form does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
201
}
202
203
/**
204
 * Mock out the \GravityView_API::field_label method
205
 *
206
 * Uses the new \GV\Field::get_label methods
207
 *
208
 * @see \GravityView_API::field_label
209
 * @internal
210
 * @since 2.0
211
 *
212
 * @return string The label of a field in an entry.
213
 */
214
function GravityView_API_field_label( $form, $field_settings, $entry, $force_show_label = false ) {
215
216
	/** A bail condition. */
217
	$bail = function( $label, $field_settings, $entry, $force_show_label, $form ) {
218 2
		if ( ! empty( $field_settings['show_label'] ) || $force_show_label ) {
219
220 2
			$label = isset( $field_settings['label'] ) ? $field_settings['label'] : '';
221
222
			// Use Gravity Forms label by default, but if a custom label is defined in GV, use it.
223 2
			if ( ! empty( $field_settings['custom_label'] ) ) {
224 1
				$label = \GravityView_API::replace_variables( $field_settings['custom_label'], $form, $entry );
225
			}
226
227
			/**
228
			 * @filter `gravityview_render_after_label` Append content to a field label
229
			 * @param[in,out] string $appended_content Content you can add after a label. Empty by default.
230
			 * @param[in] array $field GravityView field array
231
			 */
232 2
			$label .= apply_filters( 'gravityview_render_after_label', '', $field_settings );
233
		}
234
235
		/**
236
		 * @filter `gravityview/template/field_label` Modify field label output
237
		 * @since 1.7
238
		 * @param[in,out] string $label Field label HTML
239
		 * @param[in] array $field GravityView field array
240
		 * @param[in] array $form Gravity Forms form array
241
		 * @param[in] array $entry Gravity Forms entry array
242
		 */
243 2
		$label = apply_filters( 'gravityview/template/field_label', $label, $field_settings, $form, $entry );
244
245 2
		return $label;
246 3
	};
247
248 3
	$label = '';
249
250 3
	if ( ! empty( $entry['_multi'] ) && ! empty( $field_settings['form_id'] ) && ! empty( $entry['_multi'][ $field_settings['form_id'] ] ) ) {
251 2
		$entry = $entry['_multi'][ $field_settings['form_id'] ];
252 2
		if ( $_form = \GV\GF_Form::by_id( $field_settings['form_id'] ) ) {
253 2
			$form = $_form->form;
0 ignored issues
show
Documentation introduced by
The property $form is declared private in GV\Form. Since you implemented __get(), maybe consider adding a @property or @property-read annotation. This makes it easier for IDEs to provide auto-completion.

Since your code implements the magic setter _set, this function will be called for any write 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.");
        }
    }

}

Since the property has write access only, you can use the @property-write 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
257 3
	if ( empty( $entry['form_id'] ) || empty( $field_settings['id'] ) ) {
258 2
		gravityview()->log->error( 'No entry or field_settings[id] supplied', array( 'data' => array( func_get_args() ) ) );
259 2
		return $bail( $label, $field_settings, $entry, $force_show_label, $form );
260
	}
261
262 3
	if ( empty( $entry['id'] ) || ! $gv_entry = \GV\GF_Entry::by_id( $entry['id'] ) ) {
263
		gravityview()->log->error( 'Invalid \GV\GF_Entry supplied', array( 'data' => $entry ) );
264
		return $bail( $label, $field_settings, $entry, $force_show_label, $form );
265
	}
266
267 3
	$entry = $gv_entry;
268
269
	/**
270
	 * Determine the source backend.
271
	 *
272
	 * Fields with a numeric ID are Gravity Forms ones.
273
	 */
274 3
	$source = is_numeric( $field_settings['id'] ) ? \GV\Source::BACKEND_GRAVITYFORMS : \GV\Source::BACKEND_INTERNAL;
275
276
	/** Initialize the future field. */
277
	switch ( $source ):
278
		/** The Gravity Forms backend. */
279 3
		case \GV\Source::BACKEND_GRAVITYFORMS:
280 3
			if ( ! $gf_form = \GV\GF_Form::by_id( $entry['form_id'] ) ) {
281
				gravityview()->log->error( 'No form Gravity Form found for entry', array( 'data' => $entry ) );
282
				return $bail( $label, $field_settings, $entry->as_entry(), $force_show_label, $form );
283
			}
284
285 3
			if ( ! $field = $gf_form::get_field( $gf_form, $field_settings['id'] ) ) {
286
				gravityview()->log->error( 'No field found for specified form and field ID #{field_id}', array( 'field_id' => $field_settings['id'], 'data' => $form ) );
287
				return $bail( $label, $field_settings, $entry->as_entry(), $force_show_label, $gf_form->form );
0 ignored issues
show
Documentation introduced by
The property $form is declared private in GV\Form. Since you implemented __get(), maybe consider adding a @property or @property-read annotation. This makes it easier for IDEs to provide auto-completion.

Since your code implements the magic setter _set, this function will be called for any write 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.");
        }
    }

}

Since the property has write access only, you can use the @property-write 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...
288
			}
289 3
			if ( empty( $field_settings['show_label'] ) ) {
290
				/** The label never wins... */
291 1
				$field_settings['label'] = '';
292
			}
293
294 3
			break;
295
296
		/** Our internal backend. */
297 3
		case \GV\Source::BACKEND_INTERNAL:
298 3
			if ( ! $field = \GV\Internal_Source::get_field( $field_settings['id'] ) ) {
299
				return $bail( $label, $field_settings, $entry->as_entry(), $force_show_label, $form );
300
			}
301 3
			break;
302
303
		/** An unidentified backend. */
304
		default:
305
			gravityview()->log->error( 'Could not determine source for entry. Using empty field.', array( 'data' => array( func_get_args() ) ) );
306
			$field = new \GV\Field();
307
			break;
308
	endswitch;
309
310 3
	if( $force_show_label ) {
311 1
		$field_settings['show_label'] = '1';
312
	}
313
314
	/** Add the field settings. */
315 3
	$field->update_configuration( $field_settings );
316
317 3
	if ( ! empty( $field->show_label ) ) {
318
319 3
		$label = $field->get_label( null, isset( $gf_form ) ? $gf_form : null, $entry );
320
321
		/**
322
		 * @filter `gravityview_render_after_label` Append content to a field label
323
		 * @param[in,out] string $appended_content Content you can add after a label. Empty by default.
324
		 * @param[in] array $field GravityView field array
325
		 */
326 3
		$label .= apply_filters( 'gravityview_render_after_label', '', $field->as_configuration() );
327
328
	}
329
330
	/**
331
	 * @filter `gravityview/template/field_label` Modify field label output
332
	 * @since 1.7
333
	 * @param[in,out] string $label Field label HTML
334
	 * @param[in] array $field GravityView field array
335
	 * @param[in] array $form Gravity Forms form array
336
	 * @param[in] array $entry Gravity Forms entry array
337
	 */
338 3
	return apply_filters( 'gravityview/template/field_label', $label, $field->as_configuration(), isset( $gf_form ) ? $gf_form->form : $form, $entry->as_entry() );
0 ignored issues
show
Documentation introduced by
The property $form is declared private in GV\Form. Since you implemented __get(), maybe consider adding a @property or @property-read annotation. This makes it easier for IDEs to provide auto-completion.

Since your code implements the magic setter _set, this function will be called for any write 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.");
        }
    }

}

Since the property has write access only, you can use the @property-write 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...
339
}
340
341
342
/**
343
 * A manager of legacy global states and contexts.
344
 *
345
 * Handles mocking of:
346
 * - \GravityView_View_Data
347
 * - \GravityView_View
348
 * - \GravityView_frontend
349
 *
350
 * Allows us to set a specific state globally using the old
351
 *  containers, then reset it. Useful for legacy code that keeps
352
 *  on depending on these variables.
353
 *
354
 * Some examples right now include template files, utility functions,
355
 *  some actions and filters that expect the old contexts to be set.
356
 */
357
final class Legacy_Context {
358
	private static $stack = array();
359
360
	/**
361
	 * Set the state depending on the provided configuration.
362
	 *
363
	 * Saves current global state and context.
364
	 *
365
	 * Configuration keys:
366
	 *
367
	 * - \GV\View	view:		sets \GravityView_View::atts, \GravityView_View::view_id,
368
	 *								 \GravityView_View::back_link_label
369
	 *								 \GravityView_frontend::context_view_id,
370
	 *								 \GravityView_View::form, \GravityView_View::form_id
371
	 * - \GV\Field	field:		sets \GravityView_View::_current_field, \GravityView_View::field_data,
372
	 * - \GV\Entry	entry:		sets \GravityView_View::_current_entry, \GravityView_frontend::single_entry,
373
	 *								 \GravityView_frontend::entry
374
	 * - \WP_Post	post:		sets \GravityView_View::post_id, \GravityView_frontend::post_id,
375
	 *								 \GravityView_frontend::is_gravityview_post_type,
376
	 *								 \GravityView_frontend::post_has_shortcode
377
	 * - array		paging:		sets \GravityView_View::paging
378
	 * - array		sorting:	sets \GravityView_View::sorting
379
	 * - array		template:	sets \GravityView_View::template_part_slug, \GravityView_View::template_part_name
380
	 *
381
	 * - boolean	in_the_loop sets $wp_actions['loop_start'] and $wp_query::in_the_loop
382
	 *
383
	 * also:
384
	 *
385
	 * - \GV\Request	request:	sets \GravityView_frontend::is_search, \GravityView_frontend::single_entry,
386
	 *									 \GravityView_View::context, \GravityView_frontend::entry
387
	 *
388
	 * - \GV\View_Collection	views:		sets \GravityView_View_Data::views
389
	 * - \GV\Field_Collection	fields:		sets \GravityView_View::fields
390
	 * - \GV\Entry_Collection	entries:	sets \GravityView_View::entries, \GravityView_View::total_entries
391
	 *
392
	 * and automagically:
393
	 *
394
	 * - \GravityView_View		data:		sets \GravityView_frontend::gv_output_data
395
	 *
396
	 * @param array $configuration The configuration.
397
	 *
398
	 * @return void
399
	 */
400 35
	public static function push( $configuration ) {
401 35
		array_push( self::$stack, self::freeze() );
402 35
		self::load( $configuration );
403 35
	}
404
405
	/**
406
	 * Restores last saved state and context.
407
	 *
408
	 * @return void
409
	 */
410 34
	public static function pop() {
411 34
		self::thaw( array_pop( self::$stack ) );
412 34
	}
413
414
	/**
415
	 * Serializes the current configuration as needed.
416
	 *
417
	 * @return array The configuration.
418
	 */
419 35
	public static function freeze() {
420 35
		global $wp_actions, $wp_query;
421
422
		return array(
423 35
			'\GravityView_View::atts' => \GravityView_View::getInstance()->getAtts(),
424 35
			'\GravityView_View::view_id' => \GravityView_View::getInstance()->getViewId(),
425 35
			'\GravityView_View::back_link_label' => \GravityView_View::getInstance()->getBackLinkLabel( false ),
0 ignored issues
show
Deprecated Code introduced by
The method GravityView_View::getBackLinkLabel() has been deprecated with message: Use $template->get_back_label();

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
426 35
			'\GravityView_View_Data::views' => \GravityView_View_Data::getInstance()->views,
427 35
			'\GravityView_View::entries' => \GravityView_View::getInstance()->getEntries(),
428 35
			'\GravityView_View::form' => \GravityView_View::getInstance()->getForm(),
429 35
			'\GravityView_View::form_id' => \GravityView_View::getInstance()->getFormId(),
430 35
			'\GravityView_View::context' => \GravityView_View::getInstance()->getContext(),
431 35
			'\GravityView_View::total_entries' => \GravityView_View::getInstance()->getTotalEntries(),
432 35
			'\GravityView_View::post_id' => \GravityView_View::getInstance()->getPostId(),
433 35
			'\GravityView_View::hide_until_searched' => \GravityView_View::getInstance()->isHideUntilSearched(),
434 35
			'\GravityView_frontend::post_id' => \GravityView_frontend::getInstance()->getPostId(),
435 35
			'\GravityView_frontend::context_view_id' => \GravityView_frontend::getInstance()->get_context_view_id(),
436 35
			'\GravityView_frontend::is_gravityview_post_type' => \GravityView_frontend::getInstance()->isGravityviewPostType(),
437 35
			'\GravityView_frontend::post_has_shortcode' => \GravityView_frontend::getInstance()->isPostHasShortcode(),
438 35
			'\GravityView_frontend::gv_output_data' => \GravityView_frontend::getInstance()->getGvOutputData(),
439 35
			'\GravityView_View::paging' => \GravityView_View::getInstance()->getPaging(),
440 35
			'\GravityView_View::sorting' => \GravityView_View::getInstance()->getSorting(),
441 35
			'\GravityView_frontend::is_search' => \GravityView_frontend::getInstance()->isSearch(),
442 35
			'\GravityView_frontend::single_entry' => \GravityView_frontend::getInstance()->getSingleEntry(),
443 35
			'\GravityView_frontend::entry' => \GravityView_frontend::getInstance()->getEntry(),
444 35
			'\GravityView_View::_current_entry' => \GravityView_View::getInstance()->getCurrentEntry(),
445 35
			'\GravityView_View::fields' => \GravityView_View::getInstance()->getFields(),
446 35
			'\GravityView_View::_current_field' => \GravityView_View::getInstance()->getCurrentField(),
447 35
			'wp_actions[loop_start]' => empty( $wp_actions['loop_start'] ) ? 0 : $wp_actions['loop_start'],
448 35
			'wp_query::in_the_loop' => $wp_query->in_the_loop,
449
		);
450
	}
451
452
	/**
453
	 * Unserializes a saved configuration. Modifies the global state.
454
	 *
455
	 * @param array $data Saved configuration from self::freeze()
456
	 */
457 97
	public static function thaw( $data ) {
458 97
		foreach ( (array)$data as $key => $value ) {
459 97
			switch ( $key ):
460 97
				case '\GravityView_View::atts':
461 35
					\GravityView_View::getInstance()->setAtts( $value );
462 35
					break;
463 97
				case '\GravityView_View::view_id':
464 35
					\GravityView_View::getInstance()->setViewId( $value );
465 35
					break;
466 97
				case '\GravityView_View::back_link_label':
467 35
					\GravityView_View::getInstance()->setBackLinkLabel( $value );
468 35
					break;
469 97
				case '\GravityView_View_Data::views':
470 35
					\GravityView_View_Data::getInstance()->views = $value;
471 35
					break;
472 97
				case '\GravityView_View::entries':
473 35
					\GravityView_View::getInstance()->setEntries( $value );
474 35
					break;
475 97
				case '\GravityView_View::form':
476 35
					\GravityView_View::getInstance()->setForm( $value );
477 35
					break;
478 97
				case '\GravityView_View::form_id':
479 35
					\GravityView_View::getInstance()->setFormId( $value );
480 35
					break;
481 97
				case '\GravityView_View::context':
482 35
					\GravityView_View::getInstance()->setContext( $value );
483 35
					break;
484 97
				case '\GravityView_View::total_entries':
485 35
					\GravityView_View::getInstance()->setTotalEntries( $value );
486 35
					break;
487 97
				case '\GravityView_View::post_id':
488 35
					\GravityView_View::getInstance()->setPostId( $value );
489 35
					break;
490 97
				case '\GravityView_View::is_hide_until_searched':
491 35
					\GravityView_View::getInstance()->setHideUntilSearched( $value );
492 35
					break;
493 97
				case '\GravityView_frontend::post_id':
494 35
					\GravityView_frontend::getInstance()->setPostId( $value );
495 35
					break;
496 97
				case '\GravityView_frontend::context_view_id':
497 35
					$frontend = \GravityView_frontend::getInstance();
498 35
					$frontend->context_view_id = $value;
499 35
					break;
500 97
				case '\GravityView_frontend::is_gravityview_post_type':
501 35
					\GravityView_frontend::getInstance()->setIsGravityviewPostType( $value );
502 35
					break;
503 97
				case '\GravityView_frontend::post_has_shortcode':
504 35
					\GravityView_frontend::getInstance()->setPostHasShortcode( $value );
505 35
					break;
506 97
				case '\GravityView_frontend::gv_output_data':
507 35
					\GravityView_frontend::getInstance()->setGvOutputData( $value );
508 35
					break;
509 97
				case '\GravityView_View::paging':
510 34
					\GravityView_View::getInstance()->setPaging( $value );
511 34
					break;
512 97
				case '\GravityView_View::sorting':
513 34
					\GravityView_View::getInstance()->setSorting( $value );
514 34
					break;
515 97
				case '\GravityView_frontend::is_search':
516 35
					\GravityView_frontend::getInstance()->setIsSearch( $value );
517 35
					break;
518 97
				case '\GravityView_frontend::single_entry':
519 35
					\GravityView_frontend::getInstance()->setSingleEntry( $value );
520 35
					break;
521 97
				case '\GravityView_frontend::entry':
522 35
					\GravityView_frontend::getInstance()->setEntry( $value );
523 35
					break;
524 97
				case '\GravityView_View::_current_entry':
525 35
					\GravityView_View::getInstance()->setCurrentEntry( $value );
526 35
					break;
527 97
				case '\GravityView_View::fields':
528 34
					\GravityView_View::getInstance()->setFields( $value );
529 34
					break;
530 97
				case '\GravityView_View::_current_field':
531 97
					\GravityView_View::getInstance()->setCurrentField( $value );
532 97
					break;
533 34
				case 'wp_actions[loop_start]':
534 34
					global $wp_actions;
535 34
					$wp_actions['loop_start'] = $value;
536 34
					break;
537 34
				case 'wp_query::in_the_loop':
538 34
					global $wp_query;
539 34
					$wp_query->in_the_loop = $value;
540 34
					break;
541
			endswitch;
542
		}
543 97
	}
544
545
	/**
546
	 * Hydrates the legacy context globals as needed.
547
	 *
548
	 * @see self::push() for format.
549
	 *
550
	 * @return void
551
	 */
552 97
	public static function load( $configuration ) {
553 97
		foreach ( (array)$configuration as $key => $value ) {
554 97
			switch ( $key ):
555 97
				case 'view':
556 35
					$views = new \GV\View_Collection();
557 35
					$views->add( $value );
558
559 35
					self::thaw( array(
560 35
						'\GravityView_View::atts' => $value->settings->as_atts(),
561 35
						'\GravityView_View::view_id' => $value->ID,
562 35
						'\GravityView_View::back_link_label' => $value->settings->get( 'back_link_label', null ),
563 35
						'\GravityView_View::form' => $value->form ? $value->form->form : null,
564 35
						'\GravityView_View::form_id' => $value->form ? $value->form->ID : null,
565 35
						'\GravityView_View::is_hide_until_searched' => $value->settings->get( 'hide_until_searched', null ) && ! gravityview()->request->is_search(),
566
567 35
						'\GravityView_View_Data::views' => $views,
568 35
						'\GravityView_frontend::gv_output_data' => \GravityView_View_Data::getInstance(),
569 35
						'\GravityView_frontend::context_view_id' => $value->ID,
570
					) );
571 35
					break;
572 97
				case 'post':
573 11
					$has_shortcode = false;
574 11
					foreach ( \GV\Shortcode::parse( $value->post_content ) as $shortcode ) {
575 3
						if ( $shortcode->name == 'gravityview' ) {
576 3
							$has_shortcode = true;
577 3
							break;
578
						}
579
					}
580 11
					self::thaw( array(
581 11
						'\GravityView_View::post_id' => $value->ID,
582 11
						'\GravityView_frontend::post_id' => $value->ID,
583 11
						'\GravityView_frontend::is_gravityview_post_type' => $value->post_type == 'gravityview',
584 11
						'\GravityView_frontend::post_has_shortcode' => $has_shortcode,
585
					) );
586 11
					break;
587 97
				case 'views':
588
					self::thaw( array(
589
						'\GravityView_View_Data::views' => $value,
590
						'\GravityView_frontend::gv_output_data' => \GravityView_View_Data::getInstance(),
591
					) );
592
					break;
593 97
				case 'entries':
594 35
					self::thaw( array(
595
						'\GravityView_View::entries' => array_map( function( $e ) { return $e->as_entry(); }, $value->all() ),
596 35
						'\GravityView_View::total_entries' => $value->total(),
597
					) );
598 35
					break;
599 97
				case 'entry':
600 30
					self::thaw( array(
601 30
						'\GravityView_frontend::single_entry' => $value->ID,
602 30
						'\GravityView_frontend::entry' => $value->as_entry(),
603 30
						'\GravityView_View::_current_entry' => $value->as_entry(),
604
					) );
605 30
					break;
606 97
				case 'fields':
607 3
					self::thaw( array(
608 3
						'\GravityView_View::fields' => $value->as_configuration(),
609
					) );
610 3
					break;
611 96
				case 'field':
612 90
					self::thaw( array(
613
						'\GravityView_View::_current_field' => array(
614 90
							'field_id' => $value->ID,
615 90
							'field' => $value->field,
616 90
							'field_settings' => $value->as_configuration(),
617 90
							'form' => \GravityView_View::getInstance()->getForm(),
618 90
							'field_type' => $value->type, /** {@since 1.6} */
619 90
							'entry' => \GravityView_View::getInstance()->getCurrentEntry(),
620 90
							'UID' => $value->UID,
621
622
							// 'field_path' => $field_path, /** {@since 1.16} */
623
							// 'value' => $value,
624
							// 'display_value' => $display_value,
625
							// 'format' => $format,
626
						),
627
					) );
628 90
					break;
629 34
				case 'request':
630 34
					self::thaw( array(
631 34
						'\GravityView_View::context' => (
632 34
							$value->is_entry() ? 'single' :
633 26
							( $value->is_edit_entry() ? 'edit' :
634 26
									( $value->is_view() ? 'directory': null )
635
								)
636
						),
637 34
						'\GravityView_frontend::is_search' => $value->is_search(),
638
					) );
639
640 34
					if ( ! $value->is_entry() ) {
641 26
						self::thaw( array(
642 26
							'\GravityView_frontend::single_entry' => 0,
643
							'\GravityView_frontend::entry' => 0
644
						) );
645
					}
646 34
					break;
647 20
				case 'paging':
648 20
					self::thaw( array(
649 20
						'\GravityView_View::paging' => $value,
650
					) );
651 20
					break;
652 20
				case 'sorting':
653 20
					self::thaw( array(
654 20
						'\GravityView_View::sorting' => $value,
655
					) );
656 20
					break;
657 5
				case 'in_the_loop':
658 2
					self::thaw( array(
659 2
						'wp_query::in_the_loop' => $value,
660 2
						'wp_actions[loop_start]' => $value ? 1 : 0,
661
					) );
662 2
					break;
663
			endswitch;
664
		}
665
666 97
		global $gravityview_view;
667 97
		$gravityview_view = \GravityView_View::getInstance();
668 97
	}
669
670
	/**
671
	 * Resets the global state completely.
672
	 *
673
	 * Use with utmost care, as filter and action callbacks
674
	 *  may be added again.
675
	 *
676
	 * Does not touch the context stack.
677
	 *
678
	 * @return void
679
	 */
680 89
	public static function reset() {
681 89
		\GravityView_View::$instance = null;
0 ignored issues
show
Bug introduced by
The property instance cannot be accessed from this context as it is declared private in class GravityView_View.

This check looks for access to properties that are not accessible from the current context.

If you need to make a property accessible to another context you can either raise its visibility level or provide an accessible getter in the defining class.

Loading history...
682 89
		\GravityView_frontend::$instance = null;
0 ignored issues
show
Bug introduced by
The property instance cannot be accessed from this context as it is declared private in class GravityView_frontend.

This check looks for access to properties that are not accessible from the current context.

If you need to make a property accessible to another context you can either raise its visibility level or provide an accessible getter in the defining class.

Loading history...
683 89
		\GravityView_View_Data::$instance = null;
0 ignored issues
show
Bug introduced by
The property instance cannot be accessed from this context as it is declared private in class GravityView_View_Data.

This check looks for access to properties that are not accessible from the current context.

If you need to make a property accessible to another context you can either raise its visibility level or provide an accessible getter in the defining class.

Loading history...
684
685 89
		global $wp_query, $wp_actions;
686
687 89
		$wp_query->in_the_loop = false;
688 89
		$wp_actions['loop_start'] = 0;
689 89
	}
690
}
691
692
693
/** Add some global fix for field capability discrepancies. */
694
add_filter( 'gravityview/configuration/fields', function( $fields ) {
695 98
	if ( empty( $fields  ) ) {
696
		return $fields;
697
	}
698
699
	/**
700
	 * Each view field is saved in a weird capability state by default.
701
	 *
702
	 * With loggedin set to false, but a capability of 'read' it introduces
703
	 *  some logical issues and is not robust. Fix this behavior throughout
704
	 *  core by making sure capability is '' if log in is not required.
705
	 *
706
	 * Perhaps in the UI a fix would be to unite the two fields (as our new
707
	 *  \GV\Field class already does) into one dropdown:
708
	 *
709
	 * Anyone, Logged In Only, ... etc. etc.
710
	 *
711
	 * The two "settings" should be as tightly coupled as possible to avoid
712
	 *  split logic scenarios. Uniting them into one field is the way to go.
713
	 */
714
715 98
	foreach ( $fields as $position => &$_fields ) {
716
717 98
		if ( empty( $_fields ) || ! is_array( $_fields ) ) {
718
			continue;
719
		}
720
721 98
		foreach ( $_fields as $uid => &$_field ) {
722 98
			if ( ! isset( $_field['only_loggedin'] ) ) {
723 87
				continue;
724
			}
725
			/** If we do not require login, we don't require a cap. */
726 13
			$_field['only_loggedin'] != '1' && ( $_field['only_loggedin_cap'] = '' );
727
		}
728
	}
729 98
	return $fields;
730
} );
731
732
733
/** Add a future fix to make sure field configurations include the form ID. */
734
add_filter( 'gravityview/view/configuration/fields', function( $fields, $view ) {
735 159
	if ( ! $view || empty( $fields ) ) {
736
		return $fields;
737
	}
738
739 159
	if ( ! $view->form || ! $view->form->ID ) {
740
		return $fields;
741
	}
742
743
	/**
744
	 * In order to instantiate the correct \GV\Field implementation
745
	 *  we need to provide a form_id inside the configuration.
746
	 *
747
	 * @todo Make sure this actually happens in the admin side
748
	 *  when saving the views.
749
	 */
750 159
	foreach ( $fields as $position => &$_fields ) {
751
752 159
		if ( empty( $_fields ) || ! is_array( $_fields ) ) {
753
			continue;
754
		}
755
756 159
		foreach ( $_fields as $uid => &$_field ) {
757 159
			if ( ! empty( $_field['id'] ) && is_numeric( $_field['id'] ) && empty( $_field['form_id'] ) ) {
758 128
				$_field['form_id'] = $view->form->ID;
759
			}
760
		}
761
	}
762
763 159
	return $fields;
764
}, 10, 2 );
765
766
767
/** Make sure the non-configured notice is not output twice. */
768
add_action( 'gravityview/template/after', function( $gravityview = null ) {
0 ignored issues
show
Unused Code introduced by
The parameter $gravityview is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
769 31
	if ( class_exists( '\GravityView_frontend' ) ) {
770 31
		global $wp_filter;
771
772 31
		if ( empty( $wp_filter['gravityview_after'] ) ) {
773
			return;
774
		}
775
776
		/** WordPress 4.6 and lower compatibility, when WP_Hook classes were still absent. */
777 31
		if ( is_array( $wp_filter['gravityview_after'] ) ) {
778
			if ( ! empty( $wp_filter['gravityview_after'][10] ) ) {
779
				foreach ( $wp_filter['gravityview_after'][10] as $function_key => $callback ) {
780
					if ( strpos( $function_key, 'context_not_configured_warning' ) ) {
781
						unset( $wp_filter['gravityview_after'][10][ $function_key ] );
782
					}
783
				}
784
			}
785
			return;
786
		}
787
788 31
		foreach ( $wp_filter['gravityview_after']->callbacks[10] as $function_key => $callback ) {
789 31
			if ( strpos( $function_key, 'context_not_configured_warning' ) ) {
790 31
				unset( $wp_filter['gravityview_after']->callbacks[10][ $function_key ] );
791
			}
792
		}
793
	}
794 31
} );
795
796
add_filter( 'gravityview/query/is_null_condition', function() {
797
	if ( ! class_exists( $class = '\GV\Mocks\GF_Query_Condition_IS_NULL' ) ) {
798
		require_once gravityview()->plugin->dir( 'future/_mocks.isnull.php' );
799
	}
800
801
	return $class;
802
} );
803