GravityView
2.17
The best, easiest way to display Gravity Forms entries on your website.
future
_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
}
GV\Mocks
Definition:
_mocks.isnull.php:2
GV\Mocks\GF_Query_Call_TIMESORT\timesort_sql
timesort_sql( $query)
Definition:
_mocks.timesort.php:10
GV\Mocks\GF_Query_Call_TIMESORT
Time merge calls.
Definition:
_mocks.timesort.php:9