When a new module that publishes questions is created, it does not have
a default question category created until it is viewed. This means that
other parts of the system that want to use the bank while its empty
(such as bulk moving questions) cannot see it.
This adds a step to the common edit_module_post_actions() function so
that any module supporting the FEATURE_PUBLISHES_QUESTIONS feature will
have its default category created with the module instance.
This can be overridden by setting skipdefaultcategory to true
in the $moduleinfo argument to edit_post_module_actions().
This updates the logic and text of the notification that is shown while
the question transfer task is still pending, to include instances of the
new transfer_questions task. It also ensures the notification is shown
if a user tries to access the question editing screen from outside the
question bank.
When we build the options for a question category selector, the
"nochildrenof" option isn't correctly compared to the category ID. This
means we can select a category's own children as its new parent.
The Switch Banks UI was listing all question banks on the course where
the use had the managecategory permission, plus the other banks they had
used recently.
This conflicted with the check when it tried to load a selected bank,
which checked the useall/usemine permissions. This could lead to errors
if this permission had been removed.
This applies consistent checks to both lists with the useall/usermine
permissions instead.
Due to the changes in question sharing, it no longer makes sense to look
at parent contexts when establishing permissions in the question bank.
Questions now belong to a single activity module, and we should be able
to inherit and override permisions at that level like we do with any
other.
In the longer term, we probably want to replace question_edit_contexts
with something simpler, but for the time being this should apply the
correct permission checks where it's used without requiring a big
refactor of existing code.
This updates the core_question_search_shared_banks external function
with additional parameters to make it applicable outside of the "Switch
bank" dialogue in the quiz, with the corresponding changes to the
question_banks_datasource Javascript module, and unit test coverage.
It also adds a new \core_question\output\question_category_selector
class for rendering a select list of question categories, migrating
the logic used in qbank_managecategories to a core namespace. There
is a fragment callback for rendering this via AJAX.
When calling the core_question_move_questions external function, the
returned $returnurl paramater kept the original `cat`, `category` and
`lastchanged` parameters.
If the question was moved to another question bank, this meant the user
would be redirected to that bank, but the URL would still refer to the
category in the original bank. Opening the bulk move dialogue again
would then show the original bank and category selected by default, not
the current one.
This change ensures the cat parameter is updated to match the new
category, unsets the `category` parameter as it is redundant. If a single
question is moved, "lastchanged" is updated to that question, otherwise
it is unset.
We were using strlen() instead of core_text::strlen() when checking the
length of a question bank name created during the migration. This meant
that multibyte strings were counted as being too long, even though they
were within the character limit.
The "Switch question bank" modal was attempting to load every question
bank in the system the user has access to. For a highly privileged user,
this could mean loading the coursemodinfo cache for every course in the
system, resulting in memory exhaustion.
This change updates the API for getting shared question banks so it can
be searched by name and limited to a number of results. There is a new
external service that uses this functionality, and a Javascript data
provider for calling the service. The autocomplete in the "Switch
question bank" modal will now use this data provider for the "Other
question bank" autocomplete, rather than loading all banks up front.
- Improve visuals of invalid questions by highlighting and
labelling.
- Removes links to actions which will not work for invalid
questions
- Doesn't allow a preview/attempt of a quiz if it has invalid
questions. This is an improvement over it throwing an exception.
- Don't allow the adding of questions to a quiz if they have
an invalid type.
- Highlight the row and adds a badge to indicate that a question
is invalid, to make it much clearer.
- Remove the bulk action checkbox
- Fixes usage count and comments links for missingtype questions.
- Add new behat tests and fix up some existing ones to work
with new logic.
This adds the "Show All" button to the question bank filters
to allow users to select all questions easily.
It also adds new behat tests to test the functionality.
Random questions set to question categories which no longer exist
was throwing an error making it impossible to use or edit the quiz
to fix it. This will now allow the user to view the questions and
edit the quiz in order to fix the problem of the missing category.
This fixes the bug where if the latest version of the question is hidden,
the question disappears, even if older versions exist that are still visible.