MDL-51108 mod_data: Add validation for Lat. and Long.
authorAdrian Greeve <adrian@moodle.com>
Mon, 14 Sep 2015 02:03:11 +0000 (10:03 +0800)
committerAdrian Greeve <adrian@moodle.com>
Thu, 17 Sep 2015 23:33:12 +0000 (07:33 +0800)
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
mod/data/lang/en/data.php
mod/data/lib.php

index 0bb0221..a72ebe1 100644 (file)
@@ -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');
+    }
 }
index cf3f7dc..ef81fa2 100644 (file)
@@ -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';
index d664107..6fd220e 100644 (file)
@@ -3838,6 +3838,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();
@@ -3875,6 +3876,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.
@@ -3906,7 +3915,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;
 }