diff --git a/CHANGELOG.md b/CHANGELOG.md index 51c1241f1..b4fd08d93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,11 @@ * Added `onPageAction`, `onPageTask`, `onPageAction.{$action}` and `onPageTask.{$task}` events * Added `Blueprint::processForm()` method to filter form inputs * Move `processMarkdown()` method from `TwigExtension` to more general `Utils` class - +1. [](#improved) + * Add method argument `Data::filter($missingValuesAsNull)`, defaulting to `false` +1. [](#bugfix) + * Fixed `FlexForm::updateObject()` to update array values when they are empty in the form + # v1.6.0-beta.7 ## 12/14/2018 diff --git a/system/src/Grav/Common/Data/Blueprint.php b/system/src/Grav/Common/Data/Blueprint.php index 99793bfa4..f7c669ab2 100644 --- a/system/src/Grav/Common/Data/Blueprint.php +++ b/system/src/Grav/Common/Data/Blueprint.php @@ -119,13 +119,14 @@ class Blueprint extends BlueprintForm * Filter data by using blueprints. * * @param array $data + * @param bool $missingValuesAsNull * @return array */ - public function filter(array $data) + public function filter(array $data, bool $missingValuesAsNull = false) { $this->initInternals(); - return $this->blueprintSchema->filter($data); + return $this->blueprintSchema->filter($data, $missingValuesAsNull); } /** diff --git a/system/src/Grav/Common/Data/Data.php b/system/src/Grav/Common/Data/Data.php index 294a30746..e157e8167 100644 --- a/system/src/Grav/Common/Data/Data.php +++ b/system/src/Grav/Common/Data/Data.php @@ -196,12 +196,13 @@ class Data implements DataInterface, \ArrayAccess, \Countable, \JsonSerializable } /** + * @param bool $missingValuesAsNull * @return $this * Filter all items by using blueprints. */ - public function filter() + public function filter(bool $missingValuesAsNull = false) { - $this->items = $this->blueprints()->filter($this->items); + $this->items = $this->blueprints()->filter($this->items, $missingValuesAsNull); return $this; } diff --git a/system/src/Grav/Common/Data/Validation.php b/system/src/Grav/Common/Data/Validation.php index f3a03f04e..62cb9fc9b 100644 --- a/system/src/Grav/Common/Data/Validation.php +++ b/system/src/Grav/Common/Data/Validation.php @@ -597,9 +597,13 @@ class Validation if (isset($field['ignore_empty']) && Utils::isPositive($field['ignore_empty'])) { foreach ($values as $key => $val) { - foreach ($val as $inner_key => $inner_value) { - if ($inner_value == '') { - unset($val[$inner_key]); + if ($val === '') { + unset($values[$key]); + } elseif (\is_array($val)) { + foreach ($val as $inner_key => $inner_value) { + if ($inner_value === '') { + unset($val[$inner_key]); + } } } @@ -751,15 +755,12 @@ class Validation protected static function filterInt($value, $params) { - return (int) $value; + return (int)$value; } public static function validateArray($value, $params) { - return \is_array($value) - || ($value instanceof \ArrayAccess - && $value instanceof \Traversable - && $value instanceof \Countable); + return \is_array($value) || ($value instanceof \ArrayAccess && $value instanceof \Traversable && $value instanceof \Countable); } public static function filterItem_List($value, $params) diff --git a/system/src/Grav/Framework/Flex/FlexForm.php b/system/src/Grav/Framework/Flex/FlexForm.php index 0f2ac0d1c..094d9555b 100644 --- a/system/src/Grav/Framework/Flex/FlexForm.php +++ b/system/src/Grav/Framework/Flex/FlexForm.php @@ -246,4 +246,16 @@ class FlexForm implements FlexFormInterface $this->object = $data['object']; } + + /** + * Filter validated data. + * + * @param \ArrayAccess $data + */ + protected function filterData(\ArrayAccess $data): void + { + if ($data instanceof Data) { + $data->filter(true); + } + } }