Conversation
…lesson. Still need to click away from lesson and go back to get the permalink to show.
…dden by manual entry.
…nt was added inside of the course builder (as indicated by the "content_added_in_builder" flag).
…_added_in_builder is passed into the lesson data, and it overrides to empty string (no).
…hanged in a question.
|
@cursor review |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 1809a9b. Configure here.
| } ).render().$el, | ||
| onHide: function() { | ||
| Backbone.pubSub.off( 'lesson-search-select', hidePopover ); | ||
| }, |
There was a problem hiding this comment.
Stale event listener from broken onHide cleanup
Medium Severity
The onHide callback calls Backbone.pubSub.off('lesson-search-select', hidePopover), but hidePopover was never directly registered as a listener. The actual listener is the anonymous function passed to Backbone.pubSub.once(...). So the off call is a no-op and never cleans up the once handler. If the user dismisses the popover without selecting a lesson and then reopens it, stale once handlers accumulate. On the next lesson selection, all stale handlers fire, calling pop.hide() on old references and running $('.webui-popover').remove() multiple times, potentially removing unrelated popovers.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit 1809a9b. Configure here.
| this.lesson.add_quiz( quiz ); | ||
| this.model = this.lesson.get( 'quiz' ); | ||
| this.listenTo( this.model, 'change:_points', this.render_points ); | ||
| this.listenTo( this.model, 'change:permalink', this.render_settings ); |
There was a problem hiding this comment.
Missing change:name listener in add_existing_quiz
Low Severity
add_existing_quiz registers change:permalink but not change:name on the new model, unlike add_new_quiz which registers both. For cloned quizzes, the server generates a new slug returned as name. In the sync handler, permalink is set before name, so change:permalink triggers render_settings before name is updated — rendering the settings with a stale slug value that never gets corrected.
Reviewed by Cursor Bugbot for commit 1809a9b. Configure here.


Description
Fixes #3033, #3056, #3097, #2938, #3030
How has this been tested?
Screenshots
Types of changes
Checklist:
Note
Medium Risk
Changes touch both the course builder sync pipeline (JS + PHP) and lesson/quiz persistence, including new logic to conditionally overwrite lesson content. Risk is moderate because regressions could affect saving behavior and sidebar/editor UX across lessons, quizzes, and assignments.
Overview
Improves the Course Builder editing flow by adding in-builder lesson content editing (with a new
content_added_in_builderflag) and preventing builder saves from overwriting existing lesson content that was created outside the builder.Updates the sync/save response handling so newly saved lessons/quizzes/assignments can immediately display refreshed permalinks/slugs/titles without full re-renders, and sets new quizzes to publish by default (with quiz posts created using the provided title to generate a named URL).
Polishes builder UX: closes the sidebar editor when the selected model is trashed, ensures the “Add Existing Lesson” popover reliably closes after selection, and refines section selection/highlighting (auto-select first section on load, broader click target, improved selected styling).
Reviewed by Cursor Bugbot for commit 1809a9b. Bugbot is set up for automated code reviews on this repo. Configure here.