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 +}