--- original.views_calc.module Tue Jan 16 22:59:12 2007 +++ views_calc.module Fri Jul 13 13:10:27 2007 @@ -145,6 +145,24 @@ function views_calc_settings($page = '') '#options' => $calcs, '#multiple' => TRUE, ); + $form['views_calc'][$val]['views_calc_'.$val.'_row_calc_formatter'] = array( + '#type' => 'select', + '#title' => t('Option on how to display the result'), + '#default_value' => variable_get('views_calc_'.$val.'_row_calc_formatter', ''), + '#options' => views_calc_calc_formatter(), + '#multiple' => FALSE, + ); + $form['views_calc'][$val]['views_calc_'.$val.'_row_calc_prefix'] = array( + '#type' => 'textfield', + '#title' => t('Prefix the result'), + '#default_value' => variable_get('views_calc_'.$val.'_row_calc_prefix', ''), + ); + $form['views_calc'][$val]['views_calc_'.$val.'_row_calc_suffix'] = array( + '#type' => 'textfield', + '#title' => t('Suffix the result'), + '#default_value' => variable_get('views_calc_'.$val.'_row_calc_suffix', ''), + ); + $form['views_calc'][$val]['views_calc_'.$val.'_col'] = array( '#type' => 'select', '#title' => t('Columns for column calculation'), @@ -160,6 +178,24 @@ function views_calc_settings($page = '') '#options' => $calcs, '#multiple' => TRUE, ); + $form['views_calc'][$val]['views_calc_'.$val.'_col_calc_formatter'] = array( + '#type' => 'select', + '#title' => t('Option on how to display the result'), + '#default_value' => variable_get('views_calc_'.$val.'_col_calc_formatter', ''), + '#options' => views_calc_calc_formatter(), + '#multiple' => FALSE, + ); + $form['views_calc'][$val]['views_calc_'.$val.'_col_calc_prefix'] = array( + '#type' => 'textfield', + '#title' => t('Prefix the result'), + '#default_value' => variable_get('views_calc_'.$val.'_col_calc_prefix', ''), + ); + $form['views_calc'][$val]['views_calc_'.$val.'_col_calc_suffix'] = array( + '#type' => 'textfield', + '#title' => t('Suffix the result'), + '#default_value' => variable_get('views_calc_'.$val.'_col_calc_suffix', ''), + ); + $found = true; } } @@ -174,6 +210,80 @@ function views_calc_settings($page = '') } /** + * Formatter options for the result, based on CCK number.module + */ +function views_calc_calc_formatter() { + + return array( + 'default' => '9999', + 'us_0' => '9,999', + 'us_1' => '9,999.9', + 'us_2' => '9,999.99', + 'be_0' => '9.999', + 'be_1' => '9.999,9', + 'be_2' => '9.999,99', + 'fr_0' => '9 999', + 'fr_1' => '9 999, 9', + 'fr_2' => '9 999, 99', + 'unformatted' => 'unformatted', + ); +} + +/** + * Display formatted result, based on CCK number.module + */ +function views_calc_calc_formatter_display ($data, $formatter, $prefix, $suffix) { + // If the value is empty, we have $data = NULL + if (is_null($data)) { + return ''; + } + + $data = check_plain($data); + $prefix = check_plain($prefix); + $suffix = check_plain($suffix); + + if ($formatter == 'unformatted') { + return $data; + } + + switch ($formatter) { + case 'us_0': + $value = number_format($data, 0, '.', ','); + break; + case 'us_1': + $value = number_format($data, 1, '.', ','); + break; + case 'us_2': + $value = number_format($data, 2, '.', ','); + break; + case 'be_0': + $value = number_format($data, 0, ',', ' '); + break; + case 'be_1': + $value = number_format($data, 1, ',', '.'); + break; + case 'be_2': + $value = number_format($data, 2, ',', '.'); + break; + case 'fr_0': + $value = number_format($data, 0, ', ', ' '); + break; + case 'fr_1': + $value = number_format($data, 1, ', ', ' '); + break; + case 'fr_2': + $value = number_format($data, 2, ', ', ' '); + break; + default: + $value = ($data); + break; + } + + return $prefix . $value . $suffix; + +} + +/** * Implementation of views_style_plugins() from views.module */ function views_calc_views_style_plugins() { @@ -241,7 +351,15 @@ function views_calc_calc_view(&$view, &$ $cols = (array) variable_get('views_calc_'.$view_calc.'_col',''); $col_calc = (array) variable_get('views_calc_'.$view_calc.'_col_calc',''); $calc_options = (array) views_calc_calc_options(); - + + $col_calc_formatter = variable_get('views_calc_'.$view_calc.'_col_calc_formatter',''); + $col_calc_prefix = variable_get('views_calc_'.$view_calc.'_col_calc_prefix',''); + $col_calc_suffix = variable_get('views_calc_'.$view_calc.'_col_calc_suffix',''); + + $row_calc_formatter = variable_get('views_calc_'.$view_calc.'_row_calc_formatter',''); + $row_calc_prefix = variable_get('views_calc_'.$view_calc.'_row_calc_prefix',''); + $row_calc_suffix = variable_get('views_calc_'.$view_calc.'_row_calc_suffix',''); + $row_total = 0; $row_count = 0; $row_count_filled = 0; @@ -272,16 +390,16 @@ function views_calc_calc_view(&$view, &$ if (in_array($field, $rows)) { switch ($calc) { case ('COUNT'): - $add[$calc_options[$calc]] = $row_count; + $add[$calc_options[$calc]] = views_calc_calc_formatter_display($row_count, $row_calc_formatter, $row_calc_prefix, $row_calc_suffix); break; case ('AVERAGE'): - $add[$calc_options[$calc]] = $row_count_filled > 0 ? round($row_total / $row_count_filled, 2) : 0; + $add[$calc_options[$calc]] = views_calc_calc_formatter_display($row_count_filled > 0 ? round($row_total / $row_count_filled, 2) : 0, $row_calc_formatter, $row_calc_prefix, $row_calc_suffix); break; case ('AVERAGE_ALL'): - $add[$calc_options[$calc]] = $row_count > 0 ? round($row_total / $row_count, 2) : 0; + $add[$calc_options[$calc]] = views_calc_calc_formatter_display($row_count > 0 ? round($row_total / $row_count, 2) : 0, $row_calc_formatter, $row_calc_prefix, $row_calc_suffix); break; default: - $add[$calc_options[$calc]] = $row_total; + $add[$calc_options[$calc]] = views_calc_calc_formatter_display($row_total, $row_calc_formatter, $row_calc_prefix, $row_calc_suffix); break; } } @@ -313,16 +431,16 @@ function views_calc_calc_view(&$view, &$ // this is one of the items being calculated switch ($calc) { case ('COUNT'): - $add[$calc_options[$calc]][$field] = $col_count[$field]; + $add[$calc_options[$calc]][$field] = views_calc_calc_formatter_display($col_count[$field], $col_calc_formatter, $col_calc_prefix, $col_calc_suffix); break; case ('AVERAGE'): - $add[$calc_options[$calc]][$field] = $col_count_filled[$field] > 0 ? round(($col_total[$field] / $col_count_filled[$field]), 2) : 0; + $add[$calc_options[$calc]][$field] = views_calc_calc_formatter_display($col_count_filled[$field] > 0 ? round(($col_total[$field] / $col_count_filled[$field]), 2) : 0, $col_calc_formatter, $col_calc_prefix, $col_calc_suffix); break; case ('AVERAGE_ALL'): - $add[$calc_options[$calc]][$field] = $col_count[$field] > 0 ? round(($col_total[$field] / $col_count[$field]), 2) : 0; + $add[$calc_options[$calc]][$field] = views_calc_calc_formatter_display($col_count[$field] > 0 ? round(($col_total[$field] / $col_count[$field]), 2) : 0, $col_calc_formatter, $col_calc_prefix, $col_calc_suffix); break; default: - $add[$calc_options[$calc]][$field] = $col_total[$field]; + $add[$calc_options[$calc]][$field] = views_calc_calc_formatter_display($col_total[$field], $col_calc_formatter, $col_calc_prefix, $col_calc_suffix); break; }