This repository has been archived by the owner on Jul 7, 2021. It is now read-only.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
This PR fixed the issue when adding more than one line item at a time on CiviCRM 5.35.1 .
Before
After
Technical Details
This extension will create price field for each new line item inside the
foreach
loop.When creating the line item CiviCRM internally will validate each price field and one of the validation steps is fetching the potential values/options to check against - see utils.php#L2276.
CiviCRM will cache
getoptions
result in PseudoConstant.php#L278Everything is fine for one line item creating but when we create two items or more in one go, the price fields ids was cached in the first iteration during the creating of the first line item and CiviCRM will throw error when creating the second line item because the price field is invalid.
To overcome this issue, I moved the creation of line items outside of the
foreach
loop. That way the mainforeach
loop will prepare the params and create the required price fields and then will create the line items in the newforeach
loop.