Skip to content

Deletion warning when adding options to Select Options field #1097

@adrianbj

Description

@adrianbj

Short description of the issue

@ryancramerdesign - this is a weird one. Originally reported by @Toutouwai here: adrianbj/TracyDebugger#47

When Tracy's RequestInfo panel is loaded, you get a warning about deleting options when adding options to a new Select Options field that does not yet have any options.

Turns out it's because the RequestInfo panel calls $field->getExportData() and if I remove that call, the problem goes away.

Optional: Screenshots/Links that demonstrate the issue

75128462-107b1980-5729-11ea-93e0-ca18cda7e34b

For some reason on my production servers I see the same issue as @Toutouwai, but on my local dev, I actually get this error stack:

ProcessWire\WireException: value must be string in /Users/ajones/Sites/ecoreportcard/wire/modules/Fieldtype/FieldtypeOptions/SelectableOptionManager.php:257
Stack trace:
#0 /Users/ajones/Sites/ecoreportcard/wire/modules/Fieldtype/FieldtypeOptions/SelectableOptionManager.php(419): ProcessWire\SelectableOptionManager->optionsStringToArray(NULL)
#1 /Users/ajones/Sites/ecoreportcard/wire/modules/Fieldtype/FieldtypeOptions/SelectableOptionConfig.php(86): ProcessWire\SelectableOptionManager->setOptionsStringLanguages(Object(ProcessWire\Field), Array, false)
#2 /Users/ajones/Sites/ecoreportcard/wire/modules/Fieldtype/FieldtypeOptions/SelectableOptionConfig.php(202): ProcessWire\SelectableOptionConfig->process(Object(ProcessWire\InputfieldTextarea))
#3 /Users/ajones/Sites/ecoreportcard/wire/modules/Fieldtype/FieldtypeOptions/FieldtypeOptions.module(485): ProcessWire\SelectableOptionConfig->getConfigInputfields()
#4 /Users/ajones/Sites/ecoreportcard/wire/core/Wire.php(383): ProcessWire\FieldtypeOptions->___getConfigInputfields(Object(ProcessWire\Field))
#5 /Users/ajones/Sites/ecoreportcard/wire/core/WireHooks.php(823): ProcessWire\Wire->_callMethod('___getConfigInp...', Array)
#6 /Users/ajones/Sites/ecoreportcard/wire/core/Wire.php(450): ProcessWire\WireHooks->runHooks(Object(ProcessWire\FieldtypeOptions), 'getConfigInputf...', Array)
#7 /Users/ajones/Sites/ecoreportcard/wire/core/Fieldtype.php(347): ProcessWire\Wire->__call('getConfigInputf...', Array)
#8 /Users/ajones/Sites/ecoreportcard/wire/modules/Fieldtype/FieldtypeOptions/FieldtypeOptions.module(408): ProcessWire\Fieldtype->___exportConfigData(Object(ProcessWire\Field), Array)
#9 /Users/ajones/Sites/ecoreportcard/wire/core/Wire.php(386): ProcessWire\FieldtypeOptions->___exportConfigData(Object(ProcessWire\Field), Array)
#10 /Users/ajones/Sites/ecoreportcard/wire/core/WireHooks.php(823): ProcessWire\Wire->_callMethod('___exportConfig...', Array)
#11 /Users/ajones/Sites/ecoreportcard/wire/core/Wire.php(450): ProcessWire\WireHooks->runHooks(Object(ProcessWire\FieldtypeOptions), 'exportConfigDat...', Array)
#12 /Users/ajones/Sites/ecoreportcard/wire/core/Field.php(482): ProcessWire\Wire->__call('exportConfigDat...', Array)
#13 /Users/ajones/Sites/ecoreportcard/site/assets/cache/FileCompiler/site/modules/TracyDebugger/panels/RequestInfoPanel.php(110): ProcessWire\Field->getExportData()
#14 /Users/ajones/Sites/ecoreportcard/site/assets/cache/FileCompiler/site/modules/TracyDebugger/tracy-2.7.x/src/Tracy/Bar/Bar.php(150): RequestInfoPanel->getPanel()
#15 /Users/ajones/Sites/ecoreportcard/site/assets/cache/FileCompiler/site/modules/TracyDebugger/tracy-2.7.x/src/Tracy/Bar/Bar.php(122): Tracy\Bar->renderPanels('-r0')
#16 /Users/ajones/Sites/ecoreportcard/site/assets/cache/FileCompiler/site/modules/TracyDebugger/tracy-2.7.x/src/Tracy/Bar/Bar.php(94): Tracy\Bar->renderHtml('redirect', '-r0')
#17 /Users/ajones/Sites/ecoreportcard/site/assets/cache/FileCompiler/site/modules/TracyDebugger/tracy-2.7.x/src/Tracy/Debugger/Debugger.php(293): Tracy\Bar->render()
#18 [internal function]: Tracy\Debugger::shutdownHandler()
#19 {main}

Basically the issue seems to be that calling $field->getExportData() before / during the setting of the selectable options messes with $deletedOptionIDs, which on quick inspection is originally coming from the array_merge() here: https://github.com/processwire/processwire/blob/51629cdd5f381d3881133baf83e1bd2d9306f867/wire/core/Field.php#L457-L460

Please let me know if there is anything additional we can provide, but if you follow the steps in @Toutowai's screencast above, you should see either the described behavior, or the error in the Tracy debug bar.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions