The block config's "cancel" button breaks after a Pieform validation failure
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Mahara |
Fix Released
|
Medium
|
Aaron Wells | ||
15.10 |
Fix Released
|
Medium
|
Aaron Wells | ||
16.04 |
Fix Released
|
Medium
|
Aaron Wells | ||
16.10 |
Fix Released
|
Medium
|
Aaron Wells |
Bug Description
To replicate:
1. Drag a new "external media" block into your page.
2. In the block config modal that opens up, hit "submit" without filling in the required "URL or embed code" field
3. Press "Submit"
4. Wait for the form to reload and display the warning message telling you about the required field
5. Once that loads up, press the "Cancel" or "Remove" button/link next to the "Submit" button.
Expected result: The block config modal window closes, and the new external media block is no longer on your page
Actual result: The screen reloads, and you now have an empty "external media" block on your page
The reason this is happening, is because the Pieforms "cancel" button by default just reloads the form's action URL, or the cancel button's "goto" URL. When we load up the block config modal, we use Javascript code to rewire the cancel button so that it instead closes the modal and, if the block is new, deletes the block.
However, when Pieforms fails validation, Pieforms actually removes the current form displayed on the page, and replaces it with a new form that contains the validation errors. Because this is a completely different form object, the "rewiring" that we did when we opened the modal no longer applies.
Changed in mahara: | |
milestone: | 16.04.1 → none |
Changed in mahara: | |
status: | Fix Committed → Fix Released |
Fortunately, this bug is not very noticeable because few of the blocks use required fields, and the failure mode only happens if you hit the "cancel" button, and even then, if you're not paying attention you may not notice the difference between the modal closing and the page reloading.
The most noticeable side effect is that it can lead to the creation of "empty" blocks on your page, like an External Feed block with no External Feed URL, or an External Video block with no video.