GravityView  2.17
The best, easiest way to display Gravity Forms entries on your website.
_mocks.timesort.php
Go to the documentation of this file.
1 <?php
2 namespace GV\Mocks;
3 
4 /**
5  * Time merge calls.
6  *
7  * Might be in GF_Query soon.
8  */
9 class GF_Query_Call_TIMESORT extends \GF_Query_Call {
10  public function timesort_sql( $query ) {
11  global $wpdb;
12 
13  list( $column, $sql ) = $this->parameters;
14  $meta_table = \GFFormsModel::get_entry_meta_table_name();
15 
16  $alias = $query->_alias( $column->field_id, $column->source, 'm' );
17 
18 /*
19 SELECT v,
20 IF(
21 POSITION('pm' IN v) > 0,
22 
23 (
24 SUBSTRING_INDEX(v, ':', 1)
25 + IF(SUBSTRING_INDEX(v, ':', 1) < 12, 12, 0)
26 ) * 60,
27 
28 SUBSTRING_INDEX(v, ':', 1) * 60
29 ) +
30 RIGHT(IF(
31 POSITION('m' IN v) > 0,
32 SUBSTRING_INDEX(v, ' ', 1),
33 v
34 ),2) t1
35 
36 FROM meta;
37 */
38 
39  // Detect if 'pm' is in the time field
40  $pm_exists = "POSITION('pm' IN $alias.`meta_value`)";
41 
42  // Transform a pm time into minutes ((hour + (12 if hour > 12 else 0)) * 60)
43  $minutes_12 = "(SUBSTRING_INDEX($alias.`meta_value`, ':', 1) + IF(SUBSTRING_INDEX($alias.`meta_value`, ':', 1) < 12, 12, 0)) * 60";
44 
45  // Transform a 24-hour time into minutes (hour * 60), maybe compensate 12 am = 0
46  $minutes_24 = "(SUBSTRING_INDEX($alias.`meta_value`, ':', 1) - IF(POSITION('am' IN $alias.`meta_value`) AND SUBSTRING_INDEX($alias.`meta_value`, ':', 1) = '12', 12, 0)) * 60";
47 
48  // Minutes
49  $minutes = "RIGHT(IF(POSITION('m' IN $alias.`meta_value`), SUBSTRING_INDEX($alias.`meta_value`, ' ', 1), $alias.`meta_value`), 2)";
50 
51  // Combine the insanity :)
52  $condition = "IF($pm_exists, $minutes_12, $minutes_24) + $minutes";
53 
54  return "(SELECT $condition)";
55  }
56 }