Test Failed
Push — master ( 76928d...4654fc )
by Devin
09:23
created

Give_Forms_Query::update_meta_cache()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 1
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Forms Query
4
 *
5
 * @package     Give
6
 * @subpackage  Classes/Form
7
 * @copyright   Copyright (c) 2019, GiveWP
8
 * @license     https://opensource.org/licenses/gpl-license GNU Public License
9
 * @since       2.5.0
10
 */
11
12
// Exit if accessed directly.
13
if ( ! defined( 'ABSPATH' ) ) {
14
	exit;
15
}
16
17
/**
18
 * Give_Forms_Query Class
19
 * Note: only for internal use. This class is under development, so use it at your risk.
20
 *
21
 * This class is for retrieving forms data.
22
 *
23
 * @since 2.5.0
24
 */
25
class Give_Forms_Query {
26
	/**
27
	 * Preserve args
28
	 *
29
	 * @since  2.5.0
30
	 * @access public
31
	 *
32
	 * @var    array
33
	 */
34
	public $_args = array();
35
36
	/**
37
	 * The args to pass to the give_get_forms() query
38
	 *
39
	 * @since  2.5.0
40
	 * @access public
41
	 *
42
	 * @var    array
43
	 */
44
	public $args = array();
45
46
	/**
47
	 * The forms found based on the criteria set
48
	 *
49
	 * @since  2.5.0
50
	 * @access public
51
	 *
52
	 * @var    array
53
	 */
54
	public $forms = array();
55
56
	/**
57
	 * Default query arguments.
58
	 *
59
	 * Not all of these are valid arguments that can be passed to WP_Query. The ones that are not, are modified before
60
	 * the query is run to convert them to the proper syntax.
61
	 *
62
	 * @since  2.5.0
63
	 * @access public
64
	 *
65
	 * @param  $args array The array of arguments that can be passed in and used for setting up this form query.
66
	 */
67
	public function __construct( $args = array() ) {
68
		$defaults = array(
69
			'output'    => 'forms',
70
			'post_type' => array( 'give_forms' ),
71
		);
72
73
		// We do not want WordPress to handle meta cache because WordPress stores in under `post_meta` key and cache object while we want it under `form_meta`.
74
		// Similar for term cache
75
		$args['update_post_meta_cache'] = false;
76
77
		$this->args = $this->_args = wp_parse_args( $args, $defaults );
78
	}
79
80
	/**
81
	 * Retrieve forms.
82
	 *
83
	 * The query can be modified in two ways; either the action before the
84
	 * query is run, or the filter on the arguments (existing mainly for backwards
85
	 * compatibility).
86
	 *
87
	 * @since  2.5.0
88
	 * @access public
89
	 *
90
	 * @return array
91
	 */
92 View Code Duplication
	public function get_forms() {
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
93
		global $post;
94
95
		$results     = array();
96
		$this->forms = array();
97
		$cache_key   = Give_Cache::get_key( 'give_form_query', $this->args, false );
98
		$this->forms = Give_Cache::get_db_query( $cache_key );
0 ignored issues
show
Documentation Bug introduced by
It seems like \Give_Cache::get_db_query($cache_key) of type * is incompatible with the declared type array of property $forms.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
99
100
		// Return cached result.
101
		if ( ! is_null( $this->forms ) ) {
102
			return $this->forms;
103
		}
104
105
		/* @var WP_Query $query */
106
		$query = new WP_Query( $this->args );
107
108
		$custom_output = array(
109
			'forms',
110
			'give_forms',
111
		);
112
113
		if ( $query->have_posts() ) {
114
			$this->update_meta_cache( wp_list_pluck( $query->posts, 'ID' ) );
115
116
			if ( ! in_array( $this->args['output'], $custom_output ) ) {
117
				$results = $query->posts;
118
119
			} else {
120
				$previous_post = $post;
121
122
				while ( $query->have_posts() ) {
123
					$query->the_post();
124
125
					$form_id = get_post()->ID;
126
					$form    = new Give_Donate_Form( $form_id );
127
128
					$this->forms[] = apply_filters( 'give_form', $form, $form_id, $this );
129
				}
130
131
				wp_reset_postdata();
132
133
				// Prevent nest loop from producing unexpected results.
134
				if ( $previous_post instanceof WP_Post ) {
0 ignored issues
show
Bug introduced by
The class WP_Post does not exist. Did you forget a USE statement, or did you not list all dependencies?

This error could be the result of:

1. Missing dependencies

PHP Analyzer uses your composer.json file (if available) to determine the dependencies of your project and to determine all the available classes and functions. It expects the composer.json to be in the root folder of your repository.

Are you sure this class is defined by one of your dependencies, or did you maybe not list a dependency in either the require or require-dev section?

2. Missing use statement

PHP does not complain about undefined classes in ìnstanceof checks. For example, the following PHP code will work perfectly fine:

if ($x instanceof DoesNotExist) {
    // Do something.
}

If you have not tested against this specific condition, such errors might go unnoticed.

Loading history...
135
					$post = $previous_post;
0 ignored issues
show
introduced by
Overridding WordPress globals is prohibited
Loading history...
136
					setup_postdata( $post );
137
				}
138
139
				$results = $this->forms;
140
			}
141
		}
142
143
		Give_Cache::set_db_query( $cache_key, $results );
144
145
		return $results;
146
	}
147
148
	/**
149
	 * Update forms meta cache
150
	 *
151
	 * @since  2.5.0
152
	 * @access private
153
	 *
154
	 * @param $form_ids
155
	 */
156
	public static function update_meta_cache( $form_ids ) {
157
		// Exit.
158
		if ( empty( $form_ids ) ) {
159
			return;
160
		}
161
162
		update_meta_cache( Give()->form_meta->get_meta_type(), $form_ids );
163
	}
164
}
165