Page MenuHomeIn-Portal Phabricator

D375.diff
No OneTemporary

File Metadata

Created
Mon, Oct 6, 4:51 AM

D375.diff

Index: branches/5.2.x/core/kernel/utility/formatters/options_formatter.php
===================================================================
--- branches/5.2.x/core/kernel/utility/formatters/options_formatter.php
+++ branches/5.2.x/core/kernel/utility/formatters/options_formatter.php
@@ -40,32 +40,48 @@
$options = $field_options['options'];
$use_phrases = array_key_exists('use_phrases', $field_options) ? $field_options['use_phrases'] : false;
- if (strpos($value, '|') !== false) {
- // multiple checkboxes OR multiselect
- $values = Array ();
- $values_unsorted = explode('|', substr($value, 1, -1) );
+ if ( strpos($value, '|') !== false ) {
+ // Multiple checkboxes OR multiselect.
+ $sorted_values = array();
+ $selected_values = explode('|', substr($value, 1, -1));
// 1. sort values using options order from unit config
- $key_indexes = array_keys($options);
- foreach ($values_unsorted as $value) {
- $values[ array_search($value, $key_indexes) ] = $value;
+ $existing_values = array_keys($options);
+ $non_existing_selected_values = array_diff($selected_values, $existing_values);
+
+ if ( $non_existing_selected_values ) {
+ $selected_values = array_diff($selected_values, $non_existing_selected_values);
+
+ foreach ( $selected_values as $unsorted_value ) {
+ $sorted_values[array_search($unsorted_value, $existing_values)] = $unsorted_value;
+ }
+
+ ksort($sorted_values);
+ $sorted_values = array_merge($sorted_values, $non_existing_selected_values);
+ }
+ else {
+ foreach ( $selected_values as $unsorted_value ) {
+ $sorted_values[array_search($unsorted_value, $existing_values)] = $unsorted_value;
+ }
+
+ ksort($sorted_values);
}
- ksort($values);
// 2. convert values to titles
- $labels = Array ();
- foreach ($values as $value) {
- $label = $this->formatOption($value, $options, $use_phrases);
- if ($label) {
+ $labels = array();
+
+ foreach ( $sorted_values as $sorted_value ) {
+ $label = $this->formatOption($sorted_value, $options, $use_phrases);
+
+ if ( $label ) {
$labels[] = $label;
}
}
return implode($format, $labels);
}
- else {
- return $this->formatOption($value, $options, $use_phrases);
- }
+
+ return $this->formatOption($value, $options, $use_phrases);
}
function formatOption($value, $options, $use_phrases = true)
@@ -113,4 +129,4 @@
return $found ? $option_key : $value;
}
-}
\ No newline at end of file
+}

Event Timeline