mirror of
https://github.com/moodle/moodle.git
synced 2025-03-14 04:30:15 +01:00
Merge branch 'wip-MDL-51108-master' of git://github.com/abgreeve/moodle
This commit is contained in:
commit
abd3fdc977
@ -253,4 +253,26 @@ class data_field_latlong extends data_field_base {
|
||||
return isset($value) && !($value == '');
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate values for this field.
|
||||
* Both the Latitude and the Longitude fields need to be filled in.
|
||||
*
|
||||
* @param array $values The entered values for the lat. and long.
|
||||
* @return string|bool Error message or false.
|
||||
*/
|
||||
public function field_validation($values) {
|
||||
$valuecount = 0;
|
||||
// The lat long class has two values that need to be checked.
|
||||
foreach ($values as $value) {
|
||||
if (isset($value->value) && !($value->value == '')) {
|
||||
$valuecount++;
|
||||
}
|
||||
}
|
||||
// If we have nothing filled in or both filled in then everything is okay.
|
||||
if ($valuecount == 0 || $valuecount == 2) {
|
||||
return false;
|
||||
}
|
||||
// If we get here then only one field has been filled in.
|
||||
return get_string('latlongboth', 'data');
|
||||
}
|
||||
}
|
||||
|
@ -208,6 +208,7 @@ $string['invalidurl'] = 'The URL you just entered is not valid';
|
||||
$string['jstemplate'] = 'Javascript template';
|
||||
$string['latitude'] = 'Latitude';
|
||||
$string['latlong'] = 'Latitude/longitude';
|
||||
$string['latlongboth'] = 'Both the Latitude and the Longitude must be filled in.';
|
||||
$string['latlongdownloadallhint'] = 'Download link for all entries as KML';
|
||||
$string['latlongkmllabelling'] = 'How to label items in KML files (Google Earth)';
|
||||
$string['latlonglinkservicesdisplayed'] = 'Link-out services to display';
|
||||
|
@ -3874,6 +3874,7 @@ function data_process_submission(stdClass $mod, $fields, stdClass $datarecord) {
|
||||
// Empty form checking - you can't submit an empty form.
|
||||
$emptyform = true;
|
||||
$requiredfieldsfilled = true;
|
||||
$fieldsvalidated = true;
|
||||
|
||||
// Store the notifications.
|
||||
$result->generalnotifications = array();
|
||||
@ -3911,6 +3912,14 @@ function data_process_submission(stdClass $mod, $fields, stdClass $datarecord) {
|
||||
|
||||
$field = data_get_field($fieldrecord, $mod);
|
||||
if (isset($submitteddata[$fieldrecord->id])) {
|
||||
// Field validation check.
|
||||
if (method_exists($field, 'field_validation')) {
|
||||
$errormessage = $field->field_validation($submitteddata[$fieldrecord->id]);
|
||||
if ($errormessage) {
|
||||
$result->fieldnotifications[$field->field->name][] = $errormessage;
|
||||
$fieldsvalidated = false;
|
||||
}
|
||||
}
|
||||
foreach ($submitteddata[$fieldrecord->id] as $fieldname => $value) {
|
||||
if ($field->notemptyfield($value->value, $value->fieldname)) {
|
||||
// The field has content and the form is not empty.
|
||||
@ -3942,7 +3951,7 @@ function data_process_submission(stdClass $mod, $fields, stdClass $datarecord) {
|
||||
$result->generalnotifications[] = get_string('emptyaddform', 'data');
|
||||
}
|
||||
|
||||
$result->validated = $requiredfieldsfilled && !$emptyform;
|
||||
$result->validated = $requiredfieldsfilled && !$emptyform && $fieldsvalidated;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
@ -204,3 +204,24 @@ Feature: Users can be required to specify certain fields when adding entries to
|
||||
| Required URL | http://example.com/ |
|
||||
| Required Multimenu | Option 1 |
|
||||
| Required Two-Option Multimenu | Option 1 |
|
||||
|
||||
Scenario: A student fills in Latitude but not Longitude will see an error
|
||||
Given I log in as "student1"
|
||||
And I follow "Course 1"
|
||||
When I add an entry to "Test database name" database with:
|
||||
| Base Text input | Some input to allow us to submit the otherwise empty form |
|
||||
| Required Checkbox Option 1 | 1 |
|
||||
| RTOC Option 1 | 1 |
|
||||
| Latitude | 24 |
|
||||
| Required Menu | 1 |
|
||||
| Required Number | 1 |
|
||||
| Required Radio Option 1 | 1 |
|
||||
| Required Text input | New entry text |
|
||||
| Required Text area | More text |
|
||||
| Required URL | http://example.com/ |
|
||||
| Required Multimenu | 1 |
|
||||
| Required Two-Option Multimenu | 1 |
|
||||
And I set the field with xpath "//div[@title='Not required Latlong']//tr[td/label[normalize-space(.)='Latitude']]/td/input" to "20"
|
||||
And I press "Save and view"
|
||||
Then ".alert.alert-error" "css_element" should exist in the "Required Latlong" "table_row"
|
||||
And ".alert.alert-error" "css_element" should exist in the "Not required Latlong" "table_row"
|
||||
|
Loading…
x
Reference in New Issue
Block a user