The pass by reference meant the function was clobbering the variable in
the calling function. Once that was change, it was not strictly
necessary to rename the variable in the function, but I did anyway for
clarity.
Thanks to Rajesh Taneja for finding the problem, and identifying which
bit of code was broken. I really just made the patch.
Some time ago, it when from using '0' for no-subcategories to blank.
Change to properly define '0' or '1', update old questions, and make
sure to fix newly restored questions.
* If the quiz starts with an empty page, you could not move the first
question up onto it.
* Adding page breaks in the middle sometimes added them in the wrong
place.
* Adding a new page at the end is problematic, and here we fix it as
much as possible, by letting you move the last question down to create a
new page. This needs MDL-40987 to be fixed properly.
The sequence of questions that made up a quiz used to be stored as a
comma-separated list in quiz.questions. Now the same information is
stored in the rows in the quiz_slots table. This is not just 'better' in
a database design sense, but it allows for the future changes we will
need as we enhance the quiz in the MDL-40987 epic.
Having changed the database structure, all the rest of the code needs to
be changed to account for it, and that is done here.
Note that there are not many unit tests for the changed bit. That is
because as part of MDL-40987 we will be changing the code further, and
we will add unit tests then.
Some columns needed to be renamed:
* quiz -> quizid
* question -> questionid
* grade -> maxmark
Then all the places that refer to those needed to be fixed.
Add new API for filtering questions, refactoring the options to display
old questions and include subcategories into new
question_bank_search_condition classes. Make the new API pluggable via
local_[pluginname]_get_question_bank_search_conditions.
It is only necessary when there are (non-preview) attempts. However,
after making this change we have to ensure users cannot start attempts
when ->grade > 0 and ->sumgrades = 0.
Display ->grade on the order and paging tab of edit.php, so it is clear
what is going on when you are using that tab.
Finally, improve the error message a student gets if they try to start a
quiz with no questions.