Moodle PHP Documentation 4.2
Moodle 4.2.8 (Build: 20240610) (2d41ac46f45)
availability_date\condition Class Reference

Date condition. More...

Inheritance diagram for availability_date\condition:
core_availability\condition core_availability\tree_node

Public Member Functions

 __construct ($structure)
 Constructor.
 
 __toString ()
 Display a representation of this condition (used for debugging).
 
 check_available ($not, info $info, $grabthelot, $userid)
 
 check_available ($not, core_availability\info $info, $grabthelot, $userid)
 Determines whether this particular item is currently available according to the availability criteria.
 
 description_callback (array $params)
 Returns a marker indicating that some of the description text should be computed at display time.
 
 filter_user_list (array $users, $not, core_availability\info $info, capability_checker $checker)
 Tests this condition against a user list.
 
 get_description ($full, $not, core_availability\info $info)
 Obtains a string describing this restriction (whether or not it actually applies).
 
 get_standalone_description ( $full, $not, core_availability\info $info)
 Obtains a string describing this restriction, used when there is only a single restriction to display.
 
 get_user_list_sql ($not, core_availability\info $info, $onlyactive)
 Obtains SQL that returns a list of enrolled users that has been filtered by the conditions applied in the availability API, similar to calling get_enrolled_users and then filter_user_list.
 
 include_after_restore ($restoreid, $courseid, base_logger $logger, $name, base_task $task)
 Checks whether this node should be included after restore or not.
 
 is_applied_to_user_lists ()
 Checks whether this condition applies to user lists.
 
 is_available ($not, core_availability\info $info, $grabthelot, $userid)
 Determines whether a particular item is currently available according to this availability condition.
 
 is_available_for_all ($not=false)
 Checks whether this condition is actually going to be available for all users under normal circumstances.
 
 save ()
 Saves tree data back to a structure object.
 
 update_after_restore ( $restoreid, $courseid, base_logger $logger, $name)
 Updates this node after restore, returning true if anything changed.
 
 update_dependency_id ($table, $oldid, $newid)
 Updates this node if it contains any references (dependencies) to the given table and id.
 

Static Public Member Functions

static completion_value_used ($course, $cmid)
 If the plugin has been configured to rely on a particular activity's completion value, it should return true here.
 
static description_cm_name (int $cmid)
 Returns a marker indicating that an activity name should be placed in a description.
 
static description_format_string (string $str)
 Returns a marker indicating that formatted text should be placed in a description.
 
static get_json ($direction, $time)
 Returns a JSON object which corresponds to a condition of this type.
 
static set_current_time_for_test ($forcetime=0)
 Forces the current time for unit tests.
 
static update_all_dates ($courseid, $timeshift)
 Changes all date restrictions on a course by the specified shift amount.
 

Public Attributes

string const DIRECTION_FROM = '>='
 Availabile only from specified date.
 
string const DIRECTION_UNTIL = '<'
 Availabile only until specified date.
 

Protected Member Functions

 get_debug_string ()
 Obtains a representation of the options of this condition as a string, for debugging.
 
 get_either_description ($not, $standalone)
 Shows the description using the different lang strings for the standalone version or the full one.
 
 get_logical_direction ($not)
 Obtains the actual direction of checking based on the $not value.
 
 get_type ()
 Gets the type name (e.g.
 
 show_time ($time, $dateonly, $until=false)
 Shows a time either as a date or a full date and time, according to user's timezone.
 

Static Protected Member Functions

static get_time ()
 Gets time.
 
static is_midnight ($time)
 Checks whether a given time refers exactly to midnight (in current user timezone).
 
static unique_sql_parameter (array &$params, $value)
 Utility function for generating SQL parameters (because we can't use ? parameters because get_enrolled_sql has infected us with horrible named parameters).
 

Static Protected Attributes

static int $uniquesqlparametercounter = 1
 Counter to be used in tree_node::unique_sql_parameter().
 

Detailed Description

Date condition.

License
http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later

Constructor & Destructor Documentation

◆ __construct()

availability_date\condition::__construct ( $structure)

Constructor.

Parameters
stdClass$structureData structure from JSON decode
Exceptions
coding_exceptionIf invalid data structure.

Member Function Documentation

◆ __toString()

core_availability\condition::__toString ( )
inherited

Display a representation of this condition (used for debugging).

Return values
stringText representation of condition

◆ check_available()

core_availability\tree_node::check_available ( $not,
core_availability\info $info,
$grabthelot,
$userid )
abstractinherited

Determines whether this particular item is currently available according to the availability criteria.

  • This does not include the 'visible' setting (i.e. this might return true even if visible is false); visible is handled independently.
  • This does not take account of the viewhiddenactivities capability. That should apply later.

The $not option is potentially confusing. This option always indicates the 'real' value of NOT. For example, a condition inside a 'NOT AND' group will get this called with $not = true, but if you put another 'NOT OR' group inside the first group, then a condition inside that will be called with $not = false. We need to use the real values, rather than the more natural use of the current value at this point inside the tree, so that the information displayed to users makes sense.

Parameters
bool$notSet true if we are inverting the condition
core_availability\info$infoItem we're checking
bool$grabthelotPerformance hint: if true, caches information required for all course-modules, to make the front page and similar pages work more quickly (works only for current user)
int$useridUser ID to check availability for
Return values
resultAvailability check result

◆ completion_value_used()

static core_availability\condition::completion_value_used ( $course,
$cmid )
staticinherited

If the plugin has been configured to rely on a particular activity's completion value, it should return true here.

(This is necessary so that we know the course page needs to update when that activity becomes complete.)

Default implementation returns false.

Parameters
stdClass$courseMoodle course object
int$cmidID of activity whose completion value is considered
Return values
booleanTrue if the availability of something else may rely on it

Reimplemented in availability_completion\condition.

◆ description_callback()

core_availability\condition::description_callback ( array $params)
inherited

Returns a marker indicating that some of the description text should be computed at display time.

This will result in a call to the get_description_callback_value static function within the condition class.

Gets placeholder text which will be decoded by info\format_info later when we can safely call most Moodle functions.

Parameters
string[]$paramsArray of arbitrary parameters
Return values
stringPlaceholder text
Since
Moodle 4.0

◆ description_cm_name()

static core_availability\condition::description_cm_name ( int $cmid)
staticinherited

Returns a marker indicating that an activity name should be placed in a description.

Gets placeholder text which will be decoded by info\format_info later when we can safely display names.

Parameters
int$cmidCourse-module id
Return values
stringPlaceholder text
Since
Moodle 4.0

◆ description_format_string()

static core_availability\condition::description_format_string ( string $str)
staticinherited

Returns a marker indicating that formatted text should be placed in a description.

Gets placeholder text which will be decoded by info\format_info later when we can safely call format_string.

Parameters
string$strText to be processed with format_string
Return values
stringPlaceholder text
Since
Moodle 4.0

◆ filter_user_list()

core_availability\tree_node::filter_user_list ( array $users,
$not,
core_availability\info $info,
capability_checker $checker )
inherited

Tests this condition against a user list.

Users who do not meet the condition will be removed from the list, unless they have the ability to view hidden activities/sections.

This function must be implemented if is_applied_to_user_lists returns true. Otherwise it will not be called.

The function must operate efficiently, e.g. by using a fixed number of database queries regardless of how many users are in the list.

Within this function, if you need to check capabilities, please use the provided checker which caches results where possible.

Conditions do not need to check the viewhiddenactivities or viewhiddensections capabilities. These are handled by core_availability\info\filter_user_list.

Parameters
array$usersArray of userid => object
bool$notTrue if this condition is applying in negative mode
core_availability\info$infoItem we're checking
capability_checker$checker
Return values
arrayFiltered version of input array
Exceptions
coding_exceptionIf called on a condition that doesn't apply to user lists

◆ get_debug_string()

availability_date\condition::get_debug_string ( )
protected

Obtains a representation of the options of this condition as a string, for debugging.

Return values
stringText representation of parameters

Reimplemented from core_availability\condition.

◆ get_description()

availability_date\condition::get_description ( $full,
$not,
core_availability\info $info )

Obtains a string describing this restriction (whether or not it actually applies).

Used to obtain information that is displayed to students if the activity is not available to them, and for staff to see what conditions are.

The $full parameter can be used to distinguish between 'staff' cases (when displaying all information about the activity) and 'student' cases (when displaying only conditions they don't meet).

If implementations require a course or modinfo, they should use the get methods in $info. They should not use any other functions that might rely on modinfo, such as format_string.

To work around this limitation, use the functions:

description_cm_name() description_format_string() description_callback()

These return special markers which will be added to the string and processed later after modinfo is complete.

Parameters
bool$fullSet true if this is the 'full information' view
bool$notSet true if we are inverting the condition
info$infoItem we're checking
Return values
stringInformation string (for admin) about all restrictions on this item

Reimplemented from core_availability\condition.

◆ get_either_description()

availability_date\condition::get_either_description ( $not,
$standalone )
protected

Shows the description using the different lang strings for the standalone version or the full one.

Parameters
bool$notTrue if NOT is in force
bool$standaloneTrue to use standalone lang strings

◆ get_json()

static availability_date\condition::get_json ( $direction,
$time )
static

Returns a JSON object which corresponds to a condition of this type.

Intended for unit testing, as normally the JSON values are constructed by JavaScript code.

Parameters
string$directionDIRECTION_xx constant
int$timeTime in epoch seconds
Return values
stdClassObject representing condition

◆ get_logical_direction()

availability_date\condition::get_logical_direction ( $not)
protected

Obtains the actual direction of checking based on the $not value.

Parameters
bool$notTrue if condition is negated
Return values
stringDirection constant
Exceptions
coding_exception

◆ get_standalone_description()

availability_date\condition::get_standalone_description ( $full,
$not,
core_availability\info $info )

Obtains a string describing this restriction, used when there is only a single restriction to display.

(I.e. this provides a 'short form' rather than showing in a list.)

Default behaviour sticks the prefix text, normally displayed above the list, in front of the standard get_description call.

If implementations require a course or modinfo, they should use the get methods in $info. They should not use any other functions that might rely on modinfo, such as format_string.

To work around this limitation, use the functions:

description_cm_name() description_format_string() description_callback()

These return special markers which will be added to the string and processed later after modinfo is complete.

Parameters
bool$fullSet true if this is the 'full information' view
bool$notSet true if we are inverting the condition
info$infoItem we're checking
Return values
stringInformation string (for admin) about all restrictions on this item

Reimplemented from core_availability\condition.

◆ get_time()

static availability_date\condition::get_time ( )
staticprotected

Gets time.

This function is implemented here rather than calling time() so that it can be overridden in unit tests. (Would really be nice if Moodle had a generic way of doing that, but it doesn't.)

Return values
intCurrent time (seconds since epoch)

◆ get_type()

core_availability\condition::get_type ( )
protectedinherited

Gets the type name (e.g.

'date' for availability_date) of plugin.

Return values
stringThe type name for this plugin

◆ get_user_list_sql()

core_availability\tree_node::get_user_list_sql ( $not,
core_availability\info $info,
$onlyactive )
inherited

Obtains SQL that returns a list of enrolled users that has been filtered by the conditions applied in the availability API, similar to calling get_enrolled_users and then filter_user_list.

As for filter_user_list, this ONLY filters out users with conditions that are marked as applying to user lists. For example, group conditions are included but date conditions are not included.

The returned SQL is a query that returns a list of user IDs. It does not include brackets, so you neeed to add these to make it into a subquery. You would normally use it in an SQL phrase like "WHERE u.id IN ($sql)".

The SQL will be complex and may be slow. It uses named parameters (sorry, I know they are annoying, but it was unavoidable here).

If there are no conditions, the returned result is array('', array()).

Conditions do not need to check the viewhiddenactivities or viewhiddensections capabilities. These are handled by core_availability\info\get_user_list_sql.

Parameters
bool$notTrue if this condition is applying in negative mode
core_availability\info$infoItem we're checking
bool$onlyactiveIf true, only returns active enrolments
Return values
arrayArray with two elements: SQL subquery and parameters array
Exceptions
coding_exceptionIf called on a condition that doesn't apply to user lists

◆ include_after_restore()

core_availability\tree_node::include_after_restore ( $restoreid,
$courseid,
base_logger $logger,
$name,
base_task $task )
inherited

Checks whether this node should be included after restore or not.

The node may be removed depending on restore settings, which you can get from the $task object.

By default nodes are still included after restore.

Parameters
string$restoreidRestore ID
int$courseidID of target course
base_logger$loggerLogger for any warnings
string$nameName of this item (for use in warning messages)
base_task$taskCurrent restore task
Return values
boolTrue if there was any change

Reimplemented in availability_group\condition, and availability_grouping\condition.

◆ is_applied_to_user_lists()

core_availability\tree_node::is_applied_to_user_lists ( )
inherited

Checks whether this condition applies to user lists.

The default is false (the condition is used to control access, but does not prevent the student from appearing in lists).

For example, group conditions apply to user lists: we do not want to include a student in a list of users if they are prohibited from accessing the activity because they don't belong to a relevant group. However, date conditions do not apply - we still want to show users in a list of people who might have submitted an assignment, even if they are no longer able to access the assignment in question because there is a date restriction.

The general idea is that conditions which are likely to be permanent (group membership, user profile) apply to user lists. Conditions which are likely to be temporary (date, grade requirement) do not.

Conditions which do apply to user lists must implement the filter_user_list function.

Return values
boolTrue if this condition applies to user lists

Reimplemented in availability_group\condition, availability_grouping\condition, availability_profile\condition, and core_availability\tree.

◆ is_available()

availability_date\condition::is_available ( $not,
core_availability\info $info,
$grabthelot,
$userid )

Determines whether a particular item is currently available according to this availability condition.

If implementations require a course or modinfo, they should use the get methods in $info.

The $not option is potentially confusing. This option always indicates the 'real' value of NOT. For example, a condition inside a 'NOT AND' group will get this called with $not = true, but if you put another 'NOT OR' group inside the first group, then a condition inside that will be called with $not = false. We need to use the real values, rather than the more natural use of the current value at this point inside the tree, so that the information displayed to users makes sense.

Parameters
bool$notSet true if we are inverting the condition
info$infoItem we're checking
bool$grabthelotPerformance hint: if true, caches information required for all course-modules, to make the front page and similar pages work more quickly (works only for current user)
int$useridUser ID to check availability for
Return values
boolTrue if available

Reimplemented from core_availability\condition.

◆ is_available_for_all()

availability_date\condition::is_available_for_all ( $not = false)

Checks whether this condition is actually going to be available for all users under normal circumstances.

Normally, if there are any conditions, then it may be hidden. However in the case of date conditions there are some conditions which will definitely not result in it being hidden for anyone.

Parameters
bool$notSet true if we are inverting the condition
Return values
boolTrue if condition will return available for everyone

Reimplemented from core_availability\condition.

◆ is_midnight()

static availability_date\condition::is_midnight ( $time)
staticprotected

Checks whether a given time refers exactly to midnight (in current user timezone).

Parameters
int$timeTime
Return values
boolTrue if time refers to midnight, false otherwise

◆ save()

availability_date\condition::save ( )

Saves tree data back to a structure object.

Return values
stdClassStructure object (ready to be made into JSON format)

Reimplemented from core_availability\tree_node.

◆ set_current_time_for_test()

static availability_date\condition::set_current_time_for_test ( $forcetime = 0)
static

Forces the current time for unit tests.

Parameters
int$forcetimeTime to return from the get_time function

◆ show_time()

availability_date\condition::show_time ( $time,
$dateonly,
$until = false )
protected

Shows a time either as a date or a full date and time, according to user's timezone.

Parameters
int$timeTime
bool$dateonlyIf true, uses date only
bool$untilIf true, and if using date only, shows previous date
Return values
stringDate

◆ unique_sql_parameter()

static core_availability\tree_node::unique_sql_parameter ( array & $params,
$value )
staticprotectedinherited

Utility function for generating SQL parameters (because we can't use ? parameters because get_enrolled_sql has infected us with horrible named parameters).

Parameters
array$paramsParams array (value will be added to this array)
string | int$valueValue
Return values
SQLcode for the parameter, e.g. ':pr1234'

◆ update_after_restore()

availability_date\condition::update_after_restore ( $restoreid,
$courseid,
base_logger $logger,
$name )

Updates this node after restore, returning true if anything changed.

The default behaviour is simply to return false. If there is a problem with the update, $logger can be used to output a warning.

Note: If you need information about the date offset, call core_availability\info\get_restore_date_offset($restoreid). For information on the restoring task and its settings, call core_availability\info\get_restore_task($restoreid).

Parameters
string$restoreidRestore ID
int$courseidID of target course
base_logger$loggerLogger for any warnings
string$nameName of this item (for use in warning messages)
Return values
boolTrue if there was any change

Reimplemented from core_availability\tree_node.

◆ update_all_dates()

static availability_date\condition::update_all_dates ( $courseid,
$timeshift )
static

Changes all date restrictions on a course by the specified shift amount.

Used by the course reset feature.

Parameters
int$courseidCourse id
int$timeshiftOffset in seconds

◆ update_dependency_id()

core_availability\condition::update_dependency_id ( $table,
$oldid,
$newid )
inherited

Updates this node if it contains any references (dependencies) to the given table and id.

Parameters
string$tableTable name e.g. 'course_modules'
int$oldidPrevious ID
int$newidNew ID
Return values
boolTrue if it changed, otherwise false

Reimplemented from core_availability\tree_node.

Reimplemented in availability_completion\condition, availability_grade\condition, availability_group\condition, and availability_grouping\condition.


The documentation for this class was generated from the following file: