From 4eb3ff2093186bea9bc5974261660ff662acf3ba Mon Sep 17 00:00:00 2001 From: Mykyta Synelnikov Date: Tue, 5 Dec 2023 14:24:33 +0200 Subject: [PATCH] - fixed #1328; - reviewed #1373; --- includes/admin/core/class-admin-builder.php | 35 ++++++++++----------- includes/core/class-fields.php | 2 -- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/includes/admin/core/class-admin-builder.php b/includes/admin/core/class-admin-builder.php index 9b327359..cfad932d 100644 --- a/includes/admin/core/class-admin-builder.php +++ b/includes/admin/core/class-admin-builder.php @@ -333,33 +333,32 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) { die; } - /** - * Sort array function + * Sort sub-row fields by position. + * Callback for `uasort()` function * - * @param array $arr - * @param string $col - * @param int $dir + * @param array $a Array item. + * @param array $b Array item. * - * @return array + * @return int */ - function array_sort_by_column( $arr, $col, $dir = SORT_ASC ) { - $sort_col = array(); - - foreach ( $arr as $key => $row ) { - if ( ! empty( $row[ $col ] ) ) { - $sort_col[ $key ] = $row[ $col ]; - } + public function sorting_fields_by_position( $a, $b ) { + if ( empty( $a['position'] ) ) { + $a['position'] = 0; } - if ( ! empty( $sort_col ) ) { - array_multisort( $sort_col, $dir, $arr ); + if ( empty( $b['position'] ) ) { + $b['position'] = 0; } + $a['position'] = absint( $a['position'] ); + $b['position'] = absint( $b['position'] ); - return $arr; + if ( $a['position'] === $b['position'] ) { + return 0; + } + return ( $a['position'] < $b['position'] ) ? -1 : 1; } - /** * Get fields in row * @@ -523,7 +522,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Builder' ) ) {
array_sort_by_column( $subrow_fields, 'position' ); + uasort( $subrow_fields, array( &$this, 'sorting_fields_by_position' ) ); foreach ( $subrow_fields as $key => $keyarray ) { if ( ! array_key_exists( 'type', $keyarray ) || ! array_key_exists( 'title', $keyarray ) ) { continue; diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 14e77b10..59cb850a 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -4168,7 +4168,6 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } // sub row fields - $subrow_fields = null; $subrow_fields = $this->get_fields_in_subrow( $row_fields, $c ); if ( is_array( $subrow_fields ) ) { @@ -4710,7 +4709,6 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } // sub row fields - $subrow_fields = null; $subrow_fields = $this->get_fields_in_subrow( $row_fields, $c ); if ( is_array( $subrow_fields ) ) {