From 9a999305ab691d56523cf13a228138800e143b2f Mon Sep 17 00:00:00 2001
From: Paul Dale Smith <p.smith@ctidigital.com>
Date: Thu, 25 May 2017 14:31:53 +0100
Subject: [PATCH] Amending validation and query builder to use DateTime
 objects. 2881423

---
 includes/webform.report.inc | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/includes/webform.report.inc b/includes/webform.report.inc
index cfae37e0..88fec796 100644
--- a/includes/webform.report.inc
+++ b/includes/webform.report.inc
@@ -675,10 +675,12 @@ function webform_results_download_range_validate($element, $form_state) {
         }
       }
       break;
+
     case 'range_date':
       // Download Start-end range of submissions.
       // Start submission time.
-      $start_date = strtotime($element['start_date']['#value']);
+      $format = webform_date_format('short');
+      $start_date = DateTime::createFromFormat($format, $element['start_date']['#value']);
       if ($element['start_date']['#value'] == '') {
         form_error($element['start_date'], t('Start date range is required.'));
       }
@@ -686,13 +688,13 @@ function webform_results_download_range_validate($element, $form_state) {
         form_error($element['start_date'], t('Start date range is not in a valid format.'));
       }
       // End submission time.
-      $end_date = strtotime($element['end_date']['#value']);
+      $end_date = DateTime::createFromFormat($format, $element['end_date']['#value']);
       if ($element['end_date']['#value'] != '') {
         if ($end_date === FALSE) {
           form_error($element['end_date'], t('End date range is not in a valid format.'));
         }
         elseif ($start_date !== FALSE && $start_date > $end_date) {
-          form_error($element['end_date'], t('End date range must not be before the Start date..'));
+          form_error($element['end_date'], t('End date range must not be before the Start date.'));
         }
       }
       break;
@@ -1941,15 +1943,16 @@ function webform_download_sids_query($nid, $range_options, $uid = NULL) {
       break;
     case 'range_date':
       $date_field = $range_options['completion_type'] == 'finished' ? 'ws.completed' : 'ws.submitted';
-      $query->condition($date_field, strtotime($range_options['start_date']), '>=');
-      if ($range_options['end_date'] != '' && ($end_time = strtotime($range_options['end_date'])) !== FALSE) {
-        if ($end_time == strtotime('midnight', $end_time)) {
-          // Full day specified
-          $end_time += 86399; // 86400 is a full day of seconds.
-        }
-        $query->condition($date_field, $end_time, '<=');
+      $format = webform_date_format('short');
+      $start_date = DateTime::createFromFormat($format, $range_options['start_date']);
+      $start_date->setTime(0, 0, 0);
+      $query->condition($date_field, $start_date->getTimestamp(), '>=');
+      $end_time = DateTime::createFromFormat($format, $range_options['end_date']);
+      if ($range_options['end_date'] != '' && ($end_time !== FALSE)) {
+        // Check for the full day's submissions.
+        $end_time->setTime(23, 59, 59);
+        $query->condition($date_field, $end_time->getTimestamp(), '<=');
       }
-      ;
       $query->orderBy($date_field, 'ASC');
       break;
   }
-- 
2.11.0 (Apple Git-81)

