From 0dfa6a7ba3c4cc4cffed89437d5a0fc283fc534a Mon Sep 17 00:00:00 2001 From: Christian Jonak Date: Wed, 30 Oct 2019 11:33:28 +0100 Subject: [PATCH] Allow ArrayByElementPosition modifier to filter by key name Fix double brackets Allow ArrayByElementPosition modifier to filter by key name Fix double brackets --- ...PropertyModifierArrayElementByPosition.php | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/library/Director/PropertyModifier/PropertyModifierArrayElementByPosition.php b/library/Director/PropertyModifier/PropertyModifierArrayElementByPosition.php index d0d52eff..0ffc8af2 100644 --- a/library/Director/PropertyModifier/PropertyModifierArrayElementByPosition.php +++ b/library/Director/PropertyModifier/PropertyModifierArrayElementByPosition.php @@ -30,16 +30,17 @@ class PropertyModifierArrayElementByPosition extends PropertyModifierHook 'label' => $form->translate('Position Type'), 'required' => true, 'multiOptions' => $form->optionalEnum([ - 'first' => $form->translate('First Element'), - 'last' => $form->translate('Last Element'), - 'fixed' => $form->translate('Specific Element (by position)'), + 'first' => $form->translate('First Element'), + 'last' => $form->translate('Last Element'), + 'fixed' => $form->translate('Specific Element (by position)'), + 'keyname' => $form->translate('Specific Element (by key name)'), ]), ]); $form->addElement('text', 'position', [ 'label' => $form->translate('Position'), 'description' => $form->translate( - 'Numeric position' + 'Numeric position or key name' ), ]); @@ -99,6 +100,21 @@ class PropertyModifierArrayElementByPosition extends PropertyModifierHook } $pos = (int) $pos; + if (array_key_exists($pos, $value)) { + return $value[$pos]; + } else { + return $this->emptyValue($value); + } + // https://github.com/squizlabs/PHP_CodeSniffer/pull/1363 + case 'keyname': + $pos = $this->getSetting('position'); + if (! is_string($pos)) { + throw new InvalidArgumentException(sprintf( + '"%s" is not a valid array key name', + $pos + )); + } + if (array_key_exists($pos, $value)) { return $value[$pos]; } else { @@ -126,6 +142,8 @@ class PropertyModifierArrayElementByPosition extends PropertyModifierHook return 'last'; case 'fixed': return '#' . $this->getSetting('position'); + case 'keyname': + return '#' . $this->getSetting('position'); default: throw new ConfigurationError( '"%s" is not a valid array position_type',