From b44fd9143c500a8e48586500fda10ef11a154670 Mon Sep 17 00:00:00 2001 From: Adrian Greeve Date: Mon, 14 Sep 2015 10:03:11 +0800 Subject: [PATCH] MDL-51108 mod_data: Add validation for Lat. and Long. Added a check to see that both the Lat. and Long. values are entered when filling in database module entries. --- mod/data/field/latlong/field.class.php | 23 +++++++++++++++++++++++ mod/data/lang/en/data.php | 1 + mod/data/lib.php | 11 ++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/mod/data/field/latlong/field.class.php b/mod/data/field/latlong/field.class.php index 0bb0221c4c7c8..f254bc041908c 100644 --- a/mod/data/field/latlong/field.class.php +++ b/mod/data/field/latlong/field.class.php @@ -253,4 +253,27 @@ function notemptyfield($value, $name) { return isset($value) && !($value == ''); } + /** + * Validate values for this field. + * Both the Latitude and the Longitude fields need to be filled in. + * + * @since Moodle 2.9.2 + * @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'); + } } diff --git a/mod/data/lang/en/data.php b/mod/data/lang/en/data.php index f9ec9dcb59549..63a3826869b05 100644 --- a/mod/data/lang/en/data.php +++ b/mod/data/lang/en/data.php @@ -207,6 +207,7 @@ $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'; diff --git a/mod/data/lib.php b/mod/data/lib.php index 0bc02703f2c61..b7aa2095f1f2d 100644 --- a/mod/data/lib.php +++ b/mod/data/lib.php @@ -3829,6 +3829,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(); @@ -3866,6 +3867,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. @@ -3897,7 +3906,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; }