1) Get rid of "uid" that is a reserved word.
2) Add cross-db support for text columns in the get_condition_sql() method
by adding a new, defaulting to false for BC param and intensively using
the sql_compare_text() helper to build the correct sql fragments.
As part of the unit test modifications for this change, I added the get_json
function to the availability conditions that didn't have it. (This is a function
for use in unit tests.)
The previous API included a facility to filter a list of users
to include only those who are allowed to access an activity, i.e.
only people who belong to the required groups etc.
This change adds a new API function to return SQL that obtains
this list of users, so that it can be combined with other
queries.
Previously there was no way in PHP to create the JSON values used for
availability, except by manually hard-coding them (the main code to
do this normally is in JavaScript).
This makes unit tests hard to read, so I have implemented static
functions tree::get_root_json and tree::get_nested_json which allow
for easier-to-read unit tests.
Remove groupmembersonly usage in the core_availability API, and change
the update code (used in backup) so that it considers groupmembersonly
when restoring old backups.
In IE, you cannot set the value of a dropdown to an integer; it has to be a string.
This caused a bug in several parts of the conditional availability editing
interface.
It has never worked, because the data for text area fields is not
loaded into the $USER object.
Changing it so that the dropdown list does not include these types
of field.
There was an error in the JavaScript and custom user field
restrictions did not show correctly when editing the form.
Behat tests didn't cover custom user fields, so I added a
scenario.
When groupmembersonly is turned on, the 'restrict access' options
for group and grouping are supposed to appear only for sections
(which don't have groupmembersonly) and not for modules.
Prior to this fix, they appeared when creating a new module but
not when editing an existing one.
Includes all the conditions that were in previous Moodle versions:
* Date
* Grade
* Completion (of another activity)
* User profile field
Also includes conditions that are used to reimplement
groupmembersonly:
* Grouping
* Group
For each condition, the component plus unit tests are included.
PLEASE NOTE: The code to actually check each condition is reused
from previous Moodle versions and has not been modified except to
pass codechecker. This is intentional, to reduce the risk of the
change and maximise the chance that behaviour is preserved. Some
of this code might not be very good and might need updating but
that can happen separately.
AMOS BEGIN
CPY [contains,core_condition],[op_contains,availability_profile]
CPY [doesnotcontain,core_condition],[op_doesnotcontain,availability_profile]
CPY [endswith,core_condition],[op_endswith,availability_profile]
CPY [isempty,core_condition],[op_isempty,availability_profile]
CPY [isequalto,core_condition],[op_isequalto,availability_profile]
CPY [isnotempty,core_condition],[op_isnotempty,availability_profile]
CPY [startswith,core_condition],[op_startswith,availability_profile]
CPY [completion_fail,core_condition],[option_fail,availability_completion]
CPY [completion_pass,core_condition],[option_pass,availability_completion]
CPY [completion_complete,core_condition],[option_complete,availability_completion]
CPY [completion_incomplete,core_condition],[option_incomplete,availability_completion]
AMOS END