7
7
use GravityKitFoundation ;
8
8
use GravityView_Compatibility ;
9
9
use GravityView_Cache ;
10
+ use GravityView_frontend ;
11
+ use GVCommon ;
10
12
11
13
/** If this file is called directly, abort. */
12
14
if ( ! defined ( 'GRAVITYVIEW_DIR ' ) ) {
@@ -327,15 +329,15 @@ public static function content( $content ) {
327
329
* This View has no data source. There's nothing to show really.
328
330
* ...apart from a nice message if the user can do anything about it.
329
331
*/
330
- if ( \ GVCommon::has_cap ( array ( 'edit_gravityviews ' , 'edit_gravityview ' ), $ view ->ID ) ) {
332
+ if ( GVCommon::has_cap ( array ( 'edit_gravityviews ' , 'edit_gravityview ' ), $ view ->ID ) ) {
331
333
332
334
$ title = sprintf ( __ ( 'This View is not configured properly. Start by <a href="%s">selecting a form</a>. ' , 'gk-gravityview ' ), esc_url ( get_edit_post_link ( $ view ->ID , false ) ) );
333
335
334
336
$ message = esc_html__ ( 'You can only see this message because you are able to edit this View. ' , 'gk-gravityview ' );
335
337
336
338
$ image = sprintf ( '<img alt="%s" src="%s" style="margin-top: 10px;" /> ' , esc_attr__ ( 'Data Source ' , 'gk-gravityview ' ), esc_url ( plugins_url ( 'assets/images/screenshots/data-source.png ' , GRAVITYVIEW_FILE ) ) );
337
339
338
- return \ GVCommon::generate_notice ( '<h3> ' . $ title . '</h3> ' . wpautop ( $ message . $ image ), 'notice ' );
340
+ return GVCommon::generate_notice ( '<h3> ' . $ title . '</h3> ' . wpautop ( $ message . $ image ), 'notice ' );
339
341
}
340
342
break ;
341
343
case 'in_trash ' :
@@ -357,7 +359,7 @@ public static function content( $content ) {
357
359
return $ content ;
358
360
}
359
361
360
- $ is_admin_and_can_view = $ view ->settings ->get ( 'admin_show_all_statuses ' ) && \ GVCommon::has_cap ( 'gravityview_moderate_entries ' , $ view ->ID );
362
+ $ is_admin_and_can_view = $ view ->settings ->get ( 'admin_show_all_statuses ' ) && GVCommon::has_cap ( 'gravityview_moderate_entries ' , $ view ->ID );
361
363
362
364
/**
363
365
* Editing a single entry.
@@ -414,7 +416,7 @@ public static function content( $content ) {
414
416
}
415
417
}
416
418
417
- $ error = \ GVCommon::check_entry_display ( $ e ->as_entry (), $ view );
419
+ $ error = GVCommon::check_entry_display ( $ e ->as_entry (), $ view );
418
420
419
421
if ( is_wp_error ( $ error ) ) {
420
422
gravityview ()->log ->error (
@@ -535,7 +537,7 @@ public function can_render( $context = null, $request = null ) {
535
537
* Is this View an embed-only View? If so, don't allow rendering here,
536
538
* as this is a direct request.
537
539
*/
538
- if ( $ this ->settings ->get ( 'embed_only ' ) && ! \ GVCommon::has_cap ( 'read_private_gravityviews ' ) ) {
540
+ if ( $ this ->settings ->get ( 'embed_only ' ) && ! GVCommon::has_cap ( 'read_private_gravityviews ' ) ) {
539
541
return new \WP_Error ( 'gravityview/embed_only ' );
540
542
}
541
543
}
@@ -546,7 +548,7 @@ public function can_render( $context = null, $request = null ) {
546
548
547
549
/** Private, pending, draft, etc. */
548
550
$ public_states = get_post_stati ( array ( 'public ' => true ) );
549
- if ( ! in_array ( $ this ->post_status , $ public_states , true ) && ! \ GVCommon::has_cap ( 'read_gravityview ' , $ this ->ID ) ) {
551
+ if ( ! in_array ( $ this ->post_status , $ public_states , true ) && ! GVCommon::has_cap ( 'read_gravityview ' , $ this ->ID ) ) {
550
552
gravityview ()->log ->notice ( 'The current user cannot access this View #{view_id} ' , array ( 'view_id ' => $ this ->ID ) );
551
553
return new \WP_Error ( 'gravityview/not_public ' );
552
554
}
@@ -1018,10 +1020,10 @@ public function get_entries( $request = null ) {
1018
1020
/**
1019
1021
* @todo: Stop using _frontend and use something like $request->get_search_criteria() instead
1020
1022
*/
1021
- $ parameters = \ GravityView_frontend::get_view_entries_parameters ( $ parameters , $ this ->form ->ID );
1023
+ $ parameters = GravityView_frontend::get_view_entries_parameters ( $ parameters , $ this ->form ->ID );
1022
1024
1023
1025
$ parameters ['context_view_id ' ] = $ this ->ID ;
1024
- $ parameters = \ GVCommon::calculate_get_entries_criteria ( $ parameters , $ this ->form ->ID );
1026
+ $ parameters = GVCommon::calculate_get_entries_criteria ( $ parameters , $ this ->form ->ID );
1025
1027
1026
1028
if ( ! is_array ( $ parameters ) ) {
1027
1029
$ parameters = array ();
@@ -1102,24 +1104,43 @@ public function get_entries( $request = null ) {
1102
1104
$ sort_directions = $ view_setting_sort_directions ;
1103
1105
}
1104
1106
1105
- foreach ( (array ) $ sort_field_ids as $ key => $ sort_field_id ) {
1106
- $ sort_field_id = \GravityView_frontend::_override_sorting_id_by_field_type ( $ sort_field_id , $ this ->form ->ID );
1107
- $ sort_direction = strtoupper ( \GV \Utils::get ( $ sort_directions , $ key , 'ASC ' ) );
1107
+ $ sorting_parameters = [];
1108
1108
1109
- if ( empty ( $ sort_field_id ) ) {
1109
+ foreach ( $ sort_field_ids as $ key => $ id ) {
1110
+ $ sorting_parameters [ $ id ] = [
1111
+ 'id ' => GravityView_frontend::_override_sorting_id_by_field_type ( $ id , $ this ->form ->ID ),
1112
+ 'type ' => GVCommon::is_field_numeric ( $ this ->form ->ID , $ id ) ? 'numeric ' : 'string ' ,
1113
+ 'direction ' => strtoupper ( \GV \Utils::get ( $ sort_directions , $ key , 'ASC ' ) ),
1114
+ ];
1115
+ }
1116
+
1117
+ /**
1118
+ * Modifies the sorting parameters applied during the retrieval of View entries.
1119
+ *
1120
+ * @filter `gk/gravityview/view/entries/query/sorting-parameters`
1121
+ *
1122
+ * @since TBD
1123
+ *
1124
+ * @param array $sorting_parameters The array of sorting parameters, including field IDs, directions, and casting types.
1125
+ * @param View $this The View instance.
1126
+ */
1127
+ $ sorting_parameters = apply_filters ( 'gk/gravityview/view/entries/query/sorting-parameters ' , $ sorting_parameters , $ this );
1128
+
1129
+ foreach ( $ sorting_parameters as $ field ) {
1130
+ if ( empty ( $ field ['id ' ] ) ) {
1110
1131
continue ;
1111
1132
}
1112
1133
1113
- $ sort_field_id = explode ( '| ' , $ sort_field_id );
1134
+ $ sort_field_ids = explode ( '| ' , $ field [ ' id ' ] );
1114
1135
1115
- foreach ( $ sort_field_id as $ id ) {
1116
- $ order = new \GF_Query_Column ( $ id , $ this ->form ->ID );
1136
+ foreach ( $ sort_field_ids as $ field_id ) {
1137
+ $ order = new \GF_Query_Column ( $ field_id , $ this ->form ->ID );
1117
1138
1118
- if ( 'id ' !== $ id && \GVCommon:: is_field_numeric ( $ this -> form -> ID , $ id ) ) {
1139
+ if ( 'id ' !== $ field_id && ' numeric ' === $ field [ ' type ' ] ) {
1119
1140
$ order = \GF_Query_Call::CAST ( $ order , defined ( 'GF_Query::TYPE_DECIMAL ' ) ? \GF_Query::TYPE_DECIMAL : \GF_Query::TYPE_SIGNED );
1120
1141
}
1121
1142
1122
- $ query ->order ( $ order , $ sort_direction );
1143
+ $ query ->order ( $ order , $ field [ ' direction ' ] );
1123
1144
}
1124
1145
}
1125
1146
}
@@ -1816,7 +1837,7 @@ protected function apply_legacy_join_is_approved_query_conditions( \GF_Query $qu
1816
1837
return ;
1817
1838
}
1818
1839
1819
- $ is_admin_and_can_view = $ this ->settings ->get ( 'admin_show_all_statuses ' ) && \ GVCommon::has_cap ( 'gravityview_moderate_entries ' , $ this ->ID );
1840
+ $ is_admin_and_can_view = $ this ->settings ->get ( 'admin_show_all_statuses ' ) && GVCommon::has_cap ( 'gravityview_moderate_entries ' , $ this ->ID );
1820
1841
1821
1842
if ( $ is_admin_and_can_view ) {
1822
1843
return ;
0 commit comments