diff --git a/availability/condition/profile/classes/condition.php b/availability/condition/profile/classes/condition.php
index 106f74cac63..92653666084 100644
--- a/availability/condition/profile/classes/condition.php
+++ b/availability/condition/profile/classes/condition.php
@@ -197,7 +197,12 @@ class condition extends \core_availability\condition {
$this->customfield);
}
} else {
- $translatedfieldname = get_user_field_name($this->standardfield);
+ $standardfields = self::get_standard_profile_fields();
+ if (array_key_exists($this->standardfield, $standardfields)) {
+ $translatedfieldname = $standardfields[$this->standardfield];
+ } else {
+ $translatedfieldname = get_string('missing', 'availability_profile', $this->standardfield);
+ }
}
$context = \context_course::instance($course->id);
$a = new \stdClass();
@@ -321,6 +326,33 @@ class condition extends \core_availability\condition {
return $fieldconditionmet;
}
+ /**
+ * Return list of standard user profile fields used by the condition
+ *
+ * @return string[]
+ */
+ public static function get_standard_profile_fields(): array {
+ return [
+ 'firstname' => get_user_field_name('firstname'),
+ 'lastname' => get_user_field_name('lastname'),
+ 'email' => get_user_field_name('email'),
+ 'city' => get_user_field_name('city'),
+ 'country' => get_user_field_name('country'),
+ 'url' => get_user_field_name('url'),
+ 'icq' => get_user_field_name('icq'),
+ 'skype' => get_user_field_name('skype'),
+ 'aim' => get_user_field_name('aim'),
+ 'yahoo' => get_user_field_name('yahoo'),
+ 'msn' => get_user_field_name('msn'),
+ 'idnumber' => get_user_field_name('idnumber'),
+ 'institution' => get_user_field_name('institution'),
+ 'department' => get_user_field_name('department'),
+ 'phone1' => get_user_field_name('phone1'),
+ 'phone2' => get_user_field_name('phone2'),
+ 'address' => get_user_field_name('address')
+ ];
+ }
+
/**
* Gets data about custom profile fields. Cached statically in current
* request.
@@ -472,6 +504,11 @@ class condition extends \core_availability\condition {
$valuefield = 'data';
$default = $customfield->defaultdata;
} else {
+ $standardfields = self::get_standard_profile_fields();
+ if (!array_key_exists($this->standardfield, $standardfields)) {
+ // If the field isn't found, nobody matches.
+ return [];
+ }
$values = $DB->get_records_select('user', 'id ' . $sql, $params,
'', 'id, '. $this->standardfield);
$valuefield = $this->standardfield;
@@ -595,6 +632,11 @@ class condition extends \core_availability\condition {
$where = "(ud.data IS NOT NULL AND $condition)";
}
} else {
+ $standardfields = self::get_standard_profile_fields();
+ if (!array_key_exists($this->standardfield, $standardfields)) {
+ // If the field isn't found, nobody matches.
+ return ['SELECT id FROM {user} WHERE 0 = 1', []];
+ }
$tablesql = "JOIN {user} u ON u.id = userids.id";
list ($where, $mainparams) = $this->get_condition_sql(
'u.' . $this->standardfield);
diff --git a/availability/condition/profile/classes/frontend.php b/availability/condition/profile/classes/frontend.php
index 373c9a1984a..288ad9e69ee 100644
--- a/availability/condition/profile/classes/frontend.php
+++ b/availability/condition/profile/classes/frontend.php
@@ -42,26 +42,9 @@ class frontend extends \core_availability\frontend {
protected function get_javascript_init_params($course, \cm_info $cm = null,
\section_info $section = null) {
+
// Standard user fields.
- $standardfields = array(
- 'firstname' => get_user_field_name('firstname'),
- 'lastname' => get_user_field_name('lastname'),
- 'email' => get_user_field_name('email'),
- 'city' => get_user_field_name('city'),
- 'country' => get_user_field_name('country'),
- 'url' => get_user_field_name('url'),
- 'icq' => get_user_field_name('icq'),
- 'skype' => get_user_field_name('skype'),
- 'aim' => get_user_field_name('aim'),
- 'yahoo' => get_user_field_name('yahoo'),
- 'msn' => get_user_field_name('msn'),
- 'idnumber' => get_user_field_name('idnumber'),
- 'institution' => get_user_field_name('institution'),
- 'department' => get_user_field_name('department'),
- 'phone1' => get_user_field_name('phone1'),
- 'phone2' => get_user_field_name('phone2'),
- 'address' => get_user_field_name('address')
- );
+ $standardfields = condition::get_standard_profile_fields();
\core_collator::asort($standardfields);
// Custom fields.
diff --git a/availability/condition/profile/lang/en/availability_profile.php b/availability/condition/profile/lang/en/availability_profile.php
index c78dace0c6a..f1535d63619 100644
--- a/availability/condition/profile/lang/en/availability_profile.php
+++ b/availability/condition/profile/lang/en/availability_profile.php
@@ -39,7 +39,7 @@ $string['requires_notendswith'] = 'Your {$a->field} does not en
$string['requires_notisequalto'] = 'Your {$a->field} is not {$a->value}';
$string['requires_notstartswith'] = 'Your {$a->field} does not start with {$a->value}';
$string['requires_startswith'] = 'Your {$a->field} starts with {$a->value}';
-$string['missing'] = '(Missing custom field: {$a})';
+$string['missing'] = '(Missing field: {$a})';
$string['title'] = 'User profile';
$string['op_contains'] = 'contains';
$string['op_doesnotcontain'] = 'doesn\'t contain';