1717class 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