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,11 @@ public function sort_entries_php( $args ) {
4764 return 0 ;
4865 }
4966
67+ if ( $ this ->_is_date_field ) {
68+ $ first = strtotime ( $ first );
69+ $ second = strtotime ( $ second );
70+ }
71+
5072 if ( $ order === 'asc ' ) {
5173 return ( $ first < $ second ) ? -1 : 1 ;
5274 } else {
@@ -73,13 +95,15 @@ public function output_script() {
7395 'nestedFieldId ' => (int ) $ this ->_args ['nested_field_id ' ],
7496 'sortFieldId ' => (int ) $ this ->_args ['sort_field_id ' ],
7597 'sortOrder ' => strtolower ( $ this ->_args ['sort_order ' ] ),
98+ 'isDateField ' => $ this ->_is_date_field ,
7699 );
77100 ?>
78101
79102 <script type="text/javascript">
80103 (function($) {
81104 const sortFieldId = "<?php echo esc_js ( $ args ['sortFieldId ' ] ); ?> ";
82105 const sortOrder = "<?php echo esc_js ( $ args ['sortOrder ' ] ); ?> ";
106+ const isDateField = <?php echo $ args ['isDateField ' ] ? 'true ' : 'false ' ; ?> ;
83107
84108 window.gform.addFilter('gpnf_sorted_entries', function(entries, formId, fieldId, gpnf) {
85109 if (!entries || !entries.length || !entries[0][sortFieldId]) {
@@ -91,6 +115,16 @@ public function output_script() {
91115 let valA = a[sortFieldId]?.label || '';
92116 let valB = b[sortFieldId]?.label || '';
93117
118+ if (isDateField) {
119+ const dateA = new Date(valA);
120+ const dateB = new Date(valB);
121+
122+ if (sortOrder === 'desc') {
123+ return dateB - dateA;
124+ }
125+ return dateA - dateB;
126+ }
127+
94128 if (sortOrder === 'desc') {
95129 return valB.localeCompare(valA);
96130 }
0 commit comments