From 65f0c1425a54afebbd6ada7504e2f87b6e415b8d Mon Sep 17 00:00:00 2001 From: brandonkelly Date: Fri, 8 Mar 2019 12:56:43 -0800 Subject: [PATCH] ArrayHelper::ensureNonAssociative() Implements a better fix for #3947 --- CHANGELOG-v3.md | 5 +++++ src/fields/Table.php | 18 +++--------------- src/helpers/ArrayHelper.php | 12 ++++++++++++ 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/CHANGELOG-v3.md b/CHANGELOG-v3.md index 4dfa062ea7d..bd861539920 100644 --- a/CHANGELOG-v3.md +++ b/CHANGELOG-v3.md @@ -1,5 +1,10 @@ # Release Notes for Craft CMS 3.x +## Unreleased + +### Added +- Added `craft\helpers\ArrayHelper::ensureNonAssociative()`. + ## 3.1.17 - 2019-03-08 ### Changed diff --git a/src/fields/Table.php b/src/fields/Table.php index eac9648d0d6..a074d62744f 100644 --- a/src/fields/Table.php +++ b/src/fields/Table.php @@ -12,6 +12,7 @@ use craft\base\ElementInterface; use craft\base\Field; use craft\fields\data\ColorData; +use craft\helpers\ArrayHelper; use craft\helpers\DateTimeHelper; use craft\helpers\Json; use craft\validators\ColorValidator; @@ -99,6 +100,8 @@ public function init() if (!is_array($this->defaults)) { $this->defaults = []; + } else { + ArrayHelper::ensureNonAssociative($this->defaults); } // Convert default date cell values to ISO8601 strings @@ -125,21 +128,6 @@ public function rules() return $rules; } - /** - * @inheritdoc - */ - public function getSettings(): array - { - $settings = parent::getSettings(); - - // Turn defaults into a non-associative array so it doesn't get reordered when saved to the project config - if (!empty($settings['defaults'])) { - $settings['defaults'] = array_values($settings['defaults']); - } - - return $settings; - } - /** * @return bool whether minRows was set */ diff --git a/src/helpers/ArrayHelper.php b/src/helpers/ArrayHelper.php index 7b11daea5f5..5c96c2701ae 100644 --- a/src/helpers/ArrayHelper.php +++ b/src/helpers/ArrayHelper.php @@ -203,4 +203,16 @@ public static function withoutValue(array $array, $value): array static::removeValue($array, $value); return $array; } + + /** + * Ensures an array is non-associative. + * + * @param array $array + */ + public static function ensureNonAssociative(array &$array) + { + if (static::isAssociative($array, false)) { + $array = array_values($array); + } + } }