Allow ArrayByElementPosition modifier to filter by key name

Fix double brackets


Allow ArrayByElementPosition modifier to filter by key name


Fix double brackets
This commit is contained in:
Christian Jonak 2019-10-30 11:33:28 +01:00 committed by Thomas Gelf
parent e871ba4d4e
commit 0dfa6a7ba3

View File

@ -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',