Skip to content

Commit 3736689

Browse files
authored
gpnf-sort-nested-form-entries.php: Added support for sorting by Date fields.
1 parent b0ab07e commit 3736689

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

gp-nested-forms/gpnf-sort-nested-form-entries.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
class GPNF_Sort_Nested_Entries {
1818

1919
private $_args = array();
20+
private $_is_date_field = false;
2021

2122
public function __construct( $args = array() ) {
2223
$this->_args = wp_parse_args( $args, array(
@@ -30,10 +31,26 @@ public function __construct( $args = array() ) {
3031
}
3132

3233
public function init() {
34+
$this->_is_date_field = $this->is_date_field();
3335
add_filter( "gpnf_template_args_{$this->_args['parent_form_id']}_{$this->_args['nested_field_id']}", array( $this, 'sort_entries_php' ) );
3436
add_filter( 'gform_pre_render', array( $this, 'load_form_script' ), 10, 2 );
3537
}
3638

39+
private function is_date_field() {
40+
$nested_field = GFAPI::get_field( $this->_args['parent_form_id'], $this->_args['nested_field_id'] );
41+
if ( ! $nested_field || empty( $nested_field->gpnfForm ) ) {
42+
return false;
43+
}
44+
45+
$child_form = GFAPI::get_form( $nested_field->gpnfForm );
46+
if ( ! $child_form ) {
47+
return false;
48+
}
49+
50+
$sort_field = GFAPI::get_field( $child_form, $this->_args['sort_field_id'] );
51+
return $sort_field && $sort_field->type === 'date';
52+
}
53+
3754
public function sort_entries_php( $args ) {
3855
$field_id = $this->_args['sort_field_id'];
3956
$order = strtolower( $this->_args['sort_order'] );
@@ -47,6 +64,14 @@ public function sort_entries_php( $args ) {
4764
return 0;
4865
}
4966

67+
if ( $this->_is_date_field ) {
68+
$first_time = strtotime( $first );
69+
$second_time = strtotime( $second );
70+
71+
$first = ( $first_time !== false ) ? $first_time : 0;
72+
$second = ( $second_time !== false ) ? $second_time : 0;
73+
}
74+
5075
if ( $order === 'asc' ) {
5176
return ( $first < $second ) ? -1 : 1;
5277
} else {
@@ -73,13 +98,15 @@ public function output_script() {
7398
'nestedFieldId' => (int) $this->_args['nested_field_id'],
7499
'sortFieldId' => (int) $this->_args['sort_field_id'],
75100
'sortOrder' => strtolower( $this->_args['sort_order'] ),
101+
'isDateField' => $this->_is_date_field,
76102
);
77103
?>
78104

79105
<script type="text/javascript">
80106
(function($) {
81107
const sortFieldId = "<?php echo esc_js( $args['sortFieldId'] ); ?>";
82108
const sortOrder = "<?php echo esc_js( $args['sortOrder'] ); ?>";
109+
const isDateField = <?php echo $args['isDateField'] ? 'true' : 'false'; ?>;
83110

84111
window.gform.addFilter('gpnf_sorted_entries', function(entries, formId, fieldId, gpnf) {
85112
if (!entries || !entries.length || !entries[0][sortFieldId]) {
@@ -91,6 +118,19 @@ public function output_script() {
91118
let valA = a[sortFieldId]?.label || '';
92119
let valB = b[sortFieldId]?.label || '';
93120

121+
if (isDateField) {
122+
const dateA = new Date(valA);
123+
const dateB = new Date(valB);
124+
125+
const timeA = isNaN(dateA.getTime()) ? 0 : dateA.getTime();
126+
const timeB = isNaN(dateB.getTime()) ? 0 : dateB.getTime();
127+
128+
if (sortOrder === 'desc') {
129+
return timeB - timeA;
130+
}
131+
return timeA - timeB;
132+
}
133+
94134
if (sortOrder === 'desc') {
95135
return valB.localeCompare(valA);
96136
}

0 commit comments

Comments
 (0)