You are here

function money_conversion_dialog_ajax_callback in Money field 6

Menu callback to deal with our own ajax requests.

1 string reference to 'money_conversion_dialog_ajax_callback'
money_conversion_dialog_menu in modules/money_conversion_dialog/money_conversion_dialog.module
Implementation of hook_menu().

File

modules/money_conversion_dialog/money_conversion_dialog.module, line 33
Provides a 'Click to convert!' addon for Money CCK fields.

Code

function money_conversion_dialog_ajax_callback($op, $arg = '') {
  if ($op == 'currency-list') {
    return drupal_json(array(
      'currency-list' => currency_api_get_list(),
    ));
  }
  if ($op != 'convert') {
    drupal_json(array(
      'error' => t('Invalid operation: @operation', array(
        '@operation' => $op,
      )),
    ));
  }

  // Expected items:
  //   0 => amount
  //   1 => decimals
  //   2 => currency_display_mode
  //   3 => from_currency
  //   4 => to_currency
  // See theme_money_conversion_dialog().
  $settings = explode('|', $arg);

  // Validate amount, decimals and currency_display_mode.
  $display_mode = str_replace(array(
    ':',
    ' ',
  ), array(
    '|',
    '+',
  ), $settings[2]);
  $display_modes = money_get_display_modes();
  if (!is_numeric($settings[0]) || !is_numeric($settings[1]) || !isset($display_modes[$display_mode])) {
    return drupal_json(array(
      'error' => t('Invalid money data in operation settings: @settings', array(
        '@settings' => $arg,
      )),
    ));
  }

  // Validate from_currency and to_currency.
  $currency_symbols = currency_api_get_symbols();
  if (!isset($currency_symbols[$settings[3]]) || !isset($currency_symbols[$settings[4]])) {
    return drupal_json(array(
      'error' => t('Invalid currencies in operation settings: @settings', array(
        '@settings' => $arg,
      )),
    ));
  }

  // Use the Currency API to perform the conversion.
  $ret = currency_api_convert($settings[3], $settings[4], $settings[0]);
  if ($ret['status'] == FALSE) {
    return drupal_json(array(
      'error' => t('Currency exchange error: ') . t($ret['message']),
    ));
  }

  // Format the amount.
  $formatted_number = format_number($ret['value'], (int) $settings[1]);

  // Build formatted result.
  return drupal_json(array(
    'money' => theme('money_field', $formatted_number, $settings[4], $display_mode),
    'from' => $settings[3],
    'to' => $settings[4],
  ));
}