Pods – Custom Content Types and Fields - Version 2.7.18

Version Description

  • April 3rd 2020 =

New Features & Enhancements

  • Added: Add is_required() helper method for fields objects to abstract some logic. #5657 (@JoryHogeveen)
  • Updated: Removed duplicate code from pods_list_filter() that is now in wp_list_filter(). #5644 (@JoryHogeveen)
  • Updated: Now prefixing the Templates and Pages component menu items with "Pod" so they aren't as easily confused with normal WordPress menu items. #5647 (@JoryHogeveen)

Bug Fixes

  • Fixed: Compatibility layer for ACF so it won't conflict anymore. #5667 (@sc0ttkclark)
  • Fixed: Remove PHP 5.6+ only code that was causing issues for those running older PHP versions. #5659 (@JoryHogeveen)
  • Fixed: Prevent PHP errors when enforcing numeric values during validation of number fields. #5666 (@JoryHogeveen)
  • Fixed: Prevent deprecated warnings with special magic tags usage like {@user.id} instead of {@user.ID}. #5642 (@JoryHogeveen)
  • Fixed: Fix the decimal/thousands separator logic used for number and currency field validation and saving. #5653 (@JoryHogeveen)
  • Fixed: Resolve issues with [if] and [else] logic for boolean fields that was causing it to always evaluate to true. #5656 (@JoryHogeveen)
  • Fixed: Only load Freemius on Pods Admin, Plugins, or the Updates screens. (@sc0ttkclark)
Download this release

Release Info

Developer sc0ttkclark
Plugin Icon 128x128 Pods – Custom Content Types and Fields
Version 2.7.18
Comparing to
See all releases

Code changes from version 2.7.17.1 to 2.7.18

classes/PodsAPI.php CHANGED
@@ -2930,13 +2930,13 @@ class PodsAPI {
2930
  * @type null|array $old_options The old field options (if preexisting).
2931
  * }
2932
  */
2933
- do_action( 'pods_api_save_field_table_pre_alter', $definition_mode, $pod, $field['type'], $field, [
2934
  'simple' => $simple,
2935
  'definition' => $definition,
2936
  'old_name' => $old_name,
2937
  'old_definition' => $old_definition,
2938
  'old_options' => $old_options,
2939
- ] );
2940
 
2941
  if ( 'drop' === $definition_mode ) {
2942
  // Drop field column.
@@ -2978,13 +2978,13 @@ class PodsAPI {
2978
  * @type null|array $old_options The old field options (if preexisting).
2979
  * }
2980
  */
2981
- do_action( 'pods_api_save_field_table_altered', $definition_mode, $pod, $field['type'], $field, [
2982
  'simple' => $simple,
2983
  'definition' => $definition,
2984
  'old_name' => $old_name,
2985
  'old_definition' => $old_definition,
2986
  'old_options' => $old_options,
2987
- ] );
2988
  }
2989
  }
2990
 
2930
  * @type null|array $old_options The old field options (if preexisting).
2931
  * }
2932
  */
2933
+ do_action( 'pods_api_save_field_table_pre_alter', $definition_mode, $pod, $field['type'], $field, array(
2934
  'simple' => $simple,
2935
  'definition' => $definition,
2936
  'old_name' => $old_name,
2937
  'old_definition' => $old_definition,
2938
  'old_options' => $old_options,
2939
+ ) );
2940
 
2941
  if ( 'drop' === $definition_mode ) {
2942
  // Drop field column.
2978
  * @type null|array $old_options The old field options (if preexisting).
2979
  * }
2980
  */
2981
+ do_action( 'pods_api_save_field_table_altered', $definition_mode, $pod, $field['type'], $field, array(
2982
  'simple' => $simple,
2983
  'definition' => $definition,
2984
  'old_name' => $old_name,
2985
  'old_definition' => $old_definition,
2986
  'old_options' => $old_options,
2987
+ ) );
2988
  }
2989
  }
2990
 
classes/PodsField.php CHANGED
@@ -732,6 +732,19 @@ class PodsField {
732
 
733
  }
734
 
 
 
 
 
 
 
 
 
 
 
 
 
 
735
  /**
736
  * Strip HTML based on options.
737
  *
732
 
733
  }
734
 
735
+ /**
736
+ * Check if the field is required.
737
+ *
738
+ * @param array $options Field options.
739
+ *
740
+ * @return bool
741
+ *
742
+ * @since 2.7.18
743
+ */
744
+ public function is_required( $options ) {
745
+ return filter_var( pods_v( 'required', $options, false ), FILTER_VALIDATE_BOOLEAN );
746
+ }
747
+
748
  /**
749
  * Strip HTML based on options.
750
  *
classes/PodsInit.php CHANGED
@@ -172,6 +172,23 @@ class PodsInit {
172
  * @return \Freemius
173
  */
174
  public function freemius() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
  if ( $this->freemius ) {
176
  return $this->freemius;
177
  }
@@ -224,9 +241,10 @@ class PodsInit {
224
  */
225
  public function override_freemius_strings() {
226
  $override_text = array(
227
- 'free' => 'Free (WordPress.org)',
228
- 'install-free-version-now' => 'Install Now',
229
- 'download-latest' => 'Donate',
 
230
  );
231
 
232
  $freemius_addons = $this->get_freemius_addons();
@@ -343,7 +361,7 @@ class PodsInit {
343
  define( 'PODS_COMPATIBILITY', true );
344
  }
345
 
346
- if ( ! PODS_COMPATIBILITY ) {
347
  return;
348
  }
349
 
172
  * @return \Freemius
173
  */
174
  public function freemius() {
175
+ // Admin only.
176
+ if ( ! is_admin() ) {
177
+ return;
178
+ }
179
+
180
+ global $pagenow;
181
+
182
+ // Pods admin pages or plugins/update page only.
183
+ if (
184
+ 'plugins.php' !== $pagenow
185
+ && 'update-core.php' !== $pagenow
186
+ && 'update.php' !== $pagenow
187
+ && ( ! isset( $_GET['page'] ) || 0 !== strpos( $_GET['page'], 'pods' ) )
188
+ ) {
189
+ return;
190
+ }
191
+
192
  if ( $this->freemius ) {
193
  return $this->freemius;
194
  }
241
  */
242
  public function override_freemius_strings() {
243
  $override_text = array(
244
+ 'free' => __( 'Free (WordPress.org)', 'pods' ),
245
+ 'install-free-version-now' => __( 'Install Now', 'pods' ),
246
+ 'download-latest' => __( 'Donate', 'pods' ),
247
+ 'complete-the-install' => __( 'complete the process', 'pods' ),
248
  );
249
 
250
  $freemius_addons = $this->get_freemius_addons();
361
  define( 'PODS_COMPATIBILITY', true );
362
  }
363
 
364
+ if ( ! PODS_COMPATIBILITY || is_admin() ) {
365
  return;
366
  }
367
 
classes/fields/boolean.php CHANGED
@@ -79,9 +79,11 @@ class PodsField_Boolean extends PodsField {
79
 
80
  $is_empty = false;
81
 
82
- // Boolean false and integer 0 are non-empty values.
83
- if ( ! is_bool( $value ) && ! is_int( $value ) && '0' !== $value ) {
84
- $is_empty = empty( $value );
 
 
85
  }
86
 
87
  return $is_empty;
@@ -173,21 +175,18 @@ class PodsField_Boolean extends PodsField {
173
  */
174
  public function validate( $value, $name = null, $options = null, $fields = null, $pod = null, $id = null, $params = null ) {
175
 
 
 
 
 
 
176
  $errors = array();
177
  $check = $this->pre_save( $value, $id, $name, $options, $fields, $pod, $params );
178
 
179
  $yes_required = ( 'checkbox' === pods_v( static::$type . '_format_type', $options ) );
180
 
181
- $required = (int) pods_v( 'required', $options );
182
-
183
- if ( 1 === $required ) {
184
- if ( $yes_required ) {
185
- if ( 0 === $check ) {
186
- $errors[] = __( 'This field is required.', 'pods' );
187
- }
188
- } elseif ( $this->is_empty( $value ) ) {
189
- $errors[] = __( 'This field is required.', 'pods' );
190
- }
191
  }
192
 
193
  if ( ! empty( $errors ) ) {
@@ -198,6 +197,8 @@ class PodsField_Boolean extends PodsField {
198
  }
199
 
200
  /**
 
 
201
  * {@inheritdoc}
202
  */
203
  public function pre_save( $value, $id = null, $name = null, $options = null, $fields = null, $pod = null, $params = null ) {
@@ -205,19 +206,15 @@ class PodsField_Boolean extends PodsField {
205
  $yes = strtolower( pods_v( static::$type . '_yes_label', $options, __( 'Yes', 'pods' ), true ) );
206
  $no = strtolower( pods_v( static::$type . '_no_label', $options, __( 'No', 'pods' ), true ) );
207
 
208
- // Only allow 0 / 1
209
- if ( 'yes' === strtolower( $value ) || '1' === (string) $value ) {
210
- $value = 1;
211
- } elseif ( 'no' === strtolower( $value ) || '0' === (string) $value ) {
212
- $value = 0;
213
- } elseif ( strtolower( $value ) === $yes ) {
214
- $value = 1;
215
- } elseif ( strtolower( $value ) === $no ) {
216
- $value = 0;
217
- } elseif ( 0 !== (int) $value ) {
218
  $value = 1;
219
  } else {
220
- $value = 0;
 
221
  }
222
 
223
  return $value;
79
 
80
  $is_empty = false;
81
 
82
+ // is_empty() is used for if/else statements. Value should be true to pass.
83
+ $value = $this->pre_save( $value );
84
+
85
+ if ( ! $value ) {
86
+ $is_empty = true;
87
  }
88
 
89
  return $is_empty;
175
  */
176
  public function validate( $value, $name = null, $options = null, $fields = null, $pod = null, $id = null, $params = null ) {
177
 
178
+ if ( ! $this->is_required( $options ) ) {
179
+ // Any value can be parsed to boolean.
180
+ return true;
181
+ }
182
+
183
  $errors = array();
184
  $check = $this->pre_save( $value, $id, $name, $options, $fields, $pod, $params );
185
 
186
  $yes_required = ( 'checkbox' === pods_v( static::$type . '_format_type', $options ) );
187
 
188
+ if ( $yes_required && ! $check ) {
189
+ $errors[] = __( 'This field is required.', 'pods' );
 
 
 
 
 
 
 
 
190
  }
191
 
192
  if ( ! empty( $errors ) ) {
197
  }
198
 
199
  /**
200
+ * Replicates filter_var() with `FILTER_VALIDATE_BOOLEAN` and adds custom input for yes/no values.
201
+ *
202
  * {@inheritdoc}
203
  */
204
  public function pre_save( $value, $id = null, $name = null, $options = null, $fields = null, $pod = null, $params = null ) {
206
  $yes = strtolower( pods_v( static::$type . '_yes_label', $options, __( 'Yes', 'pods' ), true ) );
207
  $no = strtolower( pods_v( static::$type . '_no_label', $options, __( 'No', 'pods' ), true ) );
208
 
209
+ if ( is_string( $value ) ) {
210
+ $value = strtolower( $value );
211
+ }
212
+
213
+ if ( $yes === $value ) {
 
 
 
 
 
214
  $value = 1;
215
  } else {
216
+ // Validate: 1, "1", true, "true", "on", and "yes" as 1, all others are 0.
217
+ $value = (int) filter_var( $value, FILTER_VALIDATE_BOOLEAN );
218
  }
219
 
220
  return $value;
classes/fields/color.php CHANGED
@@ -105,7 +105,7 @@ class PodsField_Color extends PodsField {
105
  $color = str_replace( '#', '', $check );
106
 
107
  if ( 0 < strlen( $value ) && '' === $check ) {
108
- if ( 1 === (int) pods_v( 'required', $options ) ) {
109
  $errors[] = __( 'This field is required.', 'pods' );
110
  } else {
111
  // @todo Ask for a specific format in error message
105
  $color = str_replace( '#', '', $check );
106
 
107
  if ( 0 < strlen( $value ) && '' === $check ) {
108
+ if ( $this->is_required( $options ) ) {
109
  $errors[] = __( 'This field is required.', 'pods' );
110
  } else {
111
  // @todo Ask for a specific format in error message
classes/fields/currency.php CHANGED
@@ -291,6 +291,9 @@ class PodsField_Currency extends PodsField_Number {
291
  $value
292
  );
293
 
 
 
 
294
  return parent::pre_save( $value, $id, $name, $options, $fields, $pod, $params );
295
 
296
  }
291
  $value
292
  );
293
 
294
+ // Remove trailing dash only from the end of the string.
295
+ $value = rtrim( $value, '-' );
296
+
297
  return parent::pre_save( $value, $id, $name, $options, $fields, $pod, $params );
298
 
299
  }
classes/fields/email.php CHANGED
@@ -135,7 +135,7 @@ class PodsField_Email extends PodsField {
135
  if ( 0 < strlen( $value ) && '' === $check ) {
136
  $label = pods_v( 'label', $options, ucwords( str_replace( '_', ' ', $name ) ) );
137
 
138
- if ( 1 === (int) pods_v( 'required', $options ) ) {
139
  $errors[] = sprintf( __( '%s is required', 'pods' ), $label );
140
  } else {
141
  $errors[] = sprintf( __( 'Invalid e-mail provided for %s', 'pods' ), $label );
135
  if ( 0 < strlen( $value ) && '' === $check ) {
136
  $label = pods_v( 'label', $options, ucwords( str_replace( '_', ' ', $name ) ) );
137
 
138
+ if ( $this->is_required( $options ) ) {
139
  $errors[] = sprintf( __( '%s is required', 'pods' ), $label );
140
  } else {
141
  $errors[] = sprintf( __( 'Invalid e-mail provided for %s', 'pods' ), $label );
classes/fields/link.php CHANGED
@@ -219,7 +219,7 @@ class PodsField_Link extends PodsField_Website {
219
  $errors = $check;
220
  } else {
221
  if ( ! empty( $value['url'] ) && 0 < strlen( $value['url'] ) && '' === $check ) {
222
- if ( 1 === (int) pods_v( 'required', $options ) ) {
223
  $errors[] = sprintf( __( 'The %s field is required.', 'pods' ), $label );
224
  } else {
225
  $errors[] = sprintf( __( 'Invalid link provided for the field %s.', 'pods' ), $label );
219
  $errors = $check;
220
  } else {
221
  if ( ! empty( $value['url'] ) && 0 < strlen( $value['url'] ) && '' === $check ) {
222
+ if ( $this->is_required( $options ) ) {
223
  $errors[] = sprintf( __( 'The %s field is required.', 'pods' ), $label );
224
  } else {
225
  $errors[] = sprintf( __( 'Invalid link provided for the field %s.', 'pods' ), $label );
classes/fields/number.php CHANGED
@@ -162,14 +162,14 @@ class PodsField_Number extends PodsField {
162
  }
163
 
164
  /**
165
- * @todo 2.8 Centralize the usage of this methoc. See PR #5540.
166
  * {@inheritdoc}
167
  */
168
  public function is_empty( $value = null ) {
169
 
170
  $is_empty = false;
171
 
172
- $value += 0; // Convert to numeric.
173
 
174
  if ( empty( $value ) ) {
175
  $is_empty = true;
@@ -274,11 +274,6 @@ class PodsField_Number extends PodsField {
274
  */
275
  public function pre_save( $value, $id = null, $name = null, $options = null, $fields = null, $pod = null, $params = null ) {
276
 
277
- if ( $this->is_empty( $value ) && ( ! is_numeric( $value ) || 0.0 !== (float) $value ) ) {
278
- // Don't enforce a default value here.
279
- return null;
280
- }
281
-
282
  $format_args = $this->get_number_format_args( $options );
283
  $thousands = $format_args['thousands'];
284
  $dot = $format_args['dot'];
@@ -287,8 +282,8 @@ class PodsField_Number extends PodsField {
287
  if ( 'slider' !== pods_v( static::$type . '_format_type', $options ) ) {
288
  // Slider only supports `1234.00` format so no need for replacing characters.
289
  $value = str_replace(
290
- array( $thousands, $dot, html_entity_decode( $thousands ) ),
291
- array( '', '.', '' ),
292
  $value
293
  );
294
  }
@@ -297,6 +292,11 @@ class PodsField_Number extends PodsField {
297
 
298
  $value = preg_replace( '/[^0-9\.\-]/', '', $value );
299
 
 
 
 
 
 
300
  $value = number_format( (float) $value, $decimals, '.', '' );
301
 
302
  // Optionally remove trailing decimal zero's.
162
  }
163
 
164
  /**
165
+ * @todo 2.8 Centralize the usage of this method. See PR #5540.
166
  * {@inheritdoc}
167
  */
168
  public function is_empty( $value = null ) {
169
 
170
  $is_empty = false;
171
 
172
+ $value = (float) $value;
173
 
174
  if ( empty( $value ) ) {
175
  $is_empty = true;
274
  */
275
  public function pre_save( $value, $id = null, $name = null, $options = null, $fields = null, $pod = null, $params = null ) {
276
 
 
 
 
 
 
277
  $format_args = $this->get_number_format_args( $options );
278
  $thousands = $format_args['thousands'];
279
  $dot = $format_args['dot'];
282
  if ( 'slider' !== pods_v( static::$type . '_format_type', $options ) ) {
283
  // Slider only supports `1234.00` format so no need for replacing characters.
284
  $value = str_replace(
285
+ array( $thousands, html_entity_decode( $thousands ), $dot, html_entity_decode( $dot ) ),
286
+ array( '', '', '.', '.' ),
287
  $value
288
  );
289
  }
292
 
293
  $value = preg_replace( '/[^0-9\.\-]/', '', $value );
294
 
295
+ if ( $this->is_empty( $value ) && ( ! is_numeric( $value ) || 0.0 !== (float) $value ) ) {
296
+ // Don't enforce a default value here.
297
+ return null;
298
+ }
299
+
300
  $value = number_format( (float) $value, $decimals, '.', '' );
301
 
302
  // Optionally remove trailing decimal zero's.
classes/fields/oembed.php CHANGED
@@ -206,7 +206,7 @@ class PodsField_OEmbed extends PodsField {
206
  $errors = $check;
207
  } else {
208
  if ( 0 < strlen( $value ) && '' === $check ) {
209
- if ( 1 === (int) pods_v( 'required', $options ) ) {
210
  $errors[] = __( 'This field is required.', 'pods' );
211
  }
212
  }
206
  $errors = $check;
207
  } else {
208
  if ( 0 < strlen( $value ) && '' === $check ) {
209
+ if ( $this->is_required( $options ) ) {
210
  $errors[] = __( 'This field is required.', 'pods' );
211
  }
212
  }
classes/fields/password.php CHANGED
@@ -113,7 +113,7 @@ class PodsField_Password extends PodsField {
113
  $errors = $check;
114
  } else {
115
  if ( 0 < strlen( $value ) && '' === $check ) {
116
- if ( 1 === (int) pods_v( 'required', $options ) ) {
117
  $errors[] = __( 'This field is required.', 'pods' );
118
  }
119
  }
113
  $errors = $check;
114
  } else {
115
  if ( 0 < strlen( $value ) && '' === $check ) {
116
+ if ( $this->is_required( $options ) ) {
117
  $errors[] = __( 'This field is required.', 'pods' );
118
  }
119
  }
classes/fields/phone.php CHANGED
@@ -160,7 +160,7 @@ class PodsField_Phone extends PodsField {
160
  $errors = $check;
161
  } else {
162
  if ( 0 < strlen( $value ) && '' === $check ) {
163
- if ( 1 === (int) pods_v( 'required', $options ) ) {
164
  $errors[] = sprintf( __( 'The %s field is required.', 'pods' ), $label );
165
  } else {
166
  $errors[] = sprintf( __( 'Invalid phone number provided for the field %s.', 'pods' ), $label );
160
  $errors = $check;
161
  } else {
162
  if ( 0 < strlen( $value ) && '' === $check ) {
163
+ if ( $this->is_required( $options ) ) {
164
  $errors[] = sprintf( __( 'The %s field is required.', 'pods' ), $label );
165
  } else {
166
  $errors[] = sprintf( __( 'Invalid phone number provided for the field %s.', 'pods' ), $label );
classes/fields/text.php CHANGED
@@ -161,7 +161,7 @@ class PodsField_Text extends PodsField {
161
  $errors = $check;
162
  } else {
163
  if ( 0 < strlen( $value ) && '' === $check ) {
164
- if ( 1 === (int) pods_v( 'required', $options ) ) {
165
  $errors[] = __( 'This field is required.', 'pods' );
166
  }
167
  }
161
  $errors = $check;
162
  } else {
163
  if ( 0 < strlen( $value ) && '' === $check ) {
164
+ if ( $this->is_required( $options ) ) {
165
  $errors[] = __( 'This field is required.', 'pods' );
166
  }
167
  }
classes/fields/website.php CHANGED
@@ -185,7 +185,7 @@ class PodsField_Website extends PodsField {
185
  $errors = $check;
186
  } else {
187
  if ( 0 < strlen( $value ) && '' === $check ) {
188
- if ( 1 === (int) pods_v( 'required', $options ) ) {
189
  $errors[] = sprintf( __( 'The %s field is required.', 'pods' ), $label );
190
  } else {
191
  $errors[] = sprintf( __( 'Invalid website provided for the field %s.', 'pods' ), $label );
185
  $errors = $check;
186
  } else {
187
  if ( 0 < strlen( $value ) && '' === $check ) {
188
+ if ( $this->is_required( $options ) ) {
189
  $errors[] = sprintf( __( 'The %s field is required.', 'pods' ), $label );
190
  } else {
191
  $errors[] = sprintf( __( 'Invalid website provided for the field %s.', 'pods' ), $label );
components/Pages.php CHANGED
@@ -2,6 +2,8 @@
2
  /**
3
  * Name: Pages
4
  *
 
 
5
  * Description: Creates advanced URL structures using wildcards in order to enable the front-end display of Pods Advanced Content Types. Not recommended for use with other content types.
6
  *
7
  * Version: 2.3
2
  /**
3
  * Name: Pages
4
  *
5
+ * Menu Name: Pod Pages
6
+ *
7
  * Description: Creates advanced URL structures using wildcards in order to enable the front-end display of Pods Advanced Content Types. Not recommended for use with other content types.
8
  *
9
  * Version: 2.3
components/Templates/Templates.php CHANGED
@@ -2,6 +2,8 @@
2
  /**
3
  * Name: Templates
4
  *
 
 
5
  * Description: An easy to use templating engine for Pods. Use {@field_name} magic tags to output values, within your HTML markup.
6
  *
7
  * Version: 2.3
2
  /**
3
  * Name: Templates
4
  *
5
+ * Menu Name: Pod Templates
6
+ *
7
  * Description: An easy to use templating engine for Pods. Use {@field_name} magic tags to output values, within your HTML markup.
8
  *
9
  * Version: 2.3
includes/data.php CHANGED
@@ -589,6 +589,11 @@ function pods_v( $var = null, $type = 'get', $default = null, $strict = false, $
589
  if ( is_user_logged_in() ) {
590
  $user = get_userdata( get_current_user_id() );
591
 
 
 
 
 
 
592
  if ( isset( $user->{$var} ) ) {
593
  $value = $user->{$var};
594
  } elseif ( 'role' === $var ) {
@@ -2148,37 +2153,7 @@ function pods_list_filter( $list, $args = array(), $operator = 'AND' ) {
2148
  $data = get_object_vars( $data );
2149
  }
2150
 
2151
- $operator = strtoupper( $operator );
2152
- $count = count( $args );
2153
- $filtered = array();
2154
-
2155
- foreach ( $data as $key => $obj ) {
2156
- $to_match = $obj;
2157
-
2158
- if ( is_object( $to_match ) ) {
2159
- $to_match = get_object_vars( $to_match );
2160
- } elseif ( ! is_array( $to_match ) ) {
2161
- continue;
2162
- }
2163
-
2164
- $matched = 0;
2165
-
2166
- foreach ( $args as $m_key => $m_value ) {
2167
- if ( array_key_exists( $m_key, $to_match ) && $m_value == $to_match[ $m_key ] ) {
2168
- $matched ++;
2169
- }
2170
- }
2171
-
2172
- if ( 'AND' === $operator && $matched == $count ) {
2173
- $filtered[ $key ] = $obj;
2174
- } elseif ( 'OR' === $operator && $matched > 0 ) {
2175
- $filtered[ $key ] = $obj;
2176
- } elseif ( 'NOT' === $operator && 0 == $matched ) {
2177
- $filtered[ $key ] = $obj;
2178
- } else {
2179
- continue;
2180
- }
2181
- }//end foreach
2182
 
2183
  if ( $object ) {
2184
  $filtered = (object) $filtered;
589
  if ( is_user_logged_in() ) {
590
  $user = get_userdata( get_current_user_id() );
591
 
592
+ // Prevent deprecation notice from WP.
593
+ if ( 'id' === $var ) {
594
+ $var = 'ID';
595
+ }
596
+
597
  if ( isset( $user->{$var} ) ) {
598
  $value = $user->{$var};
599
  } elseif ( 'role' === $var ) {
2153
  $data = get_object_vars( $data );
2154
  }
2155
 
2156
+ $filtered = wp_list_filter( $data, $args, $operator );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2157
 
2158
  if ( $object ) {
2159
  $filtered = (object) $filtered;
init.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Pods - Custom Content Types and Fields
4
  Plugin URI: https://pods.io/
5
  Description: Pods is a framework for creating, managing, and deploying customized content types and fields
6
- Version: 2.7.17.1
7
  Author: Pods Framework Team
8
  Author URI: https://pods.io/about/
9
  Text Domain: pods
@@ -36,7 +36,7 @@ if ( defined( 'PODS_VERSION' ) || defined( 'PODS_DIR' ) ) {
36
  add_action( 'init', 'pods_deactivate_pods_ui' );
37
  } else {
38
  // Current version
39
- define( 'PODS_VERSION', '2.7.17.1' );
40
 
41
  // Version tracking between DB updates themselves
42
  define( 'PODS_DB_VERSION', '2.3.5' );
3
  Plugin Name: Pods - Custom Content Types and Fields
4
  Plugin URI: https://pods.io/
5
  Description: Pods is a framework for creating, managing, and deploying customized content types and fields
6
+ Version: 2.7.18
7
  Author: Pods Framework Team
8
  Author URI: https://pods.io/about/
9
  Text Domain: pods
36
  add_action( 'init', 'pods_deactivate_pods_ui' );
37
  } else {
38
  // Current version
39
+ define( 'PODS_VERSION', '2.7.18' );
40
 
41
  // Version tracking between DB updates themselves
42
  define( 'PODS_DB_VERSION', '2.3.5' );
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: pods, custom post types, custom taxonomies, content types, custom fields,
5
  Requires at least: 4.5
6
  Tested up to: 5.4
7
  Requires PHP: 5.3
8
- Stable tag: 2.7.17.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -190,6 +190,24 @@ We are also available through our [Live Slack Chat](https://pods.io/chat/) to he
190
 
191
  == Changelog ==
192
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
193
  = 2.7.17.1 - March 27th 2020 =
194
 
195
  **Bug Fixes**
5
  Requires at least: 4.5
6
  Tested up to: 5.4
7
  Requires PHP: 5.3
8
+ Stable tag: 2.7.18
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
190
 
191
  == Changelog ==
192
 
193
+ = 2.7.18 - April 3rd 2020 =
194
+
195
+ **New Features & Enhancements**
196
+
197
+ * Added: Add is_required() helper method for fields objects to abstract some logic. #5657 (@JoryHogeveen)
198
+ * Updated: Removed duplicate code from pods_list_filter() that is now in wp_list_filter(). #5644 (@JoryHogeveen)
199
+ * Updated: Now prefixing the Templates and Pages component menu items with "Pod" so they aren't as easily confused with normal WordPress menu items. #5647 (@JoryHogeveen)
200
+
201
+ **Bug Fixes**
202
+
203
+ * Fixed: Compatibility layer for ACF so it won't conflict anymore. #5667 (@sc0ttkclark)
204
+ * Fixed: Remove PHP 5.6+ only code that was causing issues for those running older PHP versions. #5659 (@JoryHogeveen)
205
+ * Fixed: Prevent PHP errors when enforcing numeric values during validation of number fields. #5666 (@JoryHogeveen)
206
+ * Fixed: Prevent deprecated warnings with special magic tags usage like `{@user.id}` instead of `{@user.ID}`. #5642 (@JoryHogeveen)
207
+ * Fixed: Fix the decimal/thousands separator logic used for number and currency field validation and saving. #5653 (@JoryHogeveen)
208
+ * Fixed: Resolve issues with `[if]` and `[else]` logic for boolean fields that was causing it to always evaluate to true. #5656 (@JoryHogeveen)
209
+ * Fixed: Only load Freemius on Pods Admin, Plugins, or the Updates screens. (@sc0ttkclark)
210
+
211
  = 2.7.17.1 - March 27th 2020 =
212
 
213
  **Bug Fixes**