<?php

/**
 * Implementation of hook_features_api().
 */
function messaging_features_api() {
  return array(
    'messaging' => array(
      'name' => t('Messaging'),
      'default_hook' => 'messaging_features_store',
    ),
  );
}

/**
 * Implementation of hook_features_export_options().
 */
function messaging_features_export_options() {
  $rs = db_query('SELECT type, msgkey, method FROM {messaging_message_parts} ORDER BY type, method, msgkey');
  while ($row = db_fetch_array($rs)) {
    $key = implode('::', $row);
    $options[$key] = $key;
  }
  return $options;
}

/**
 * Implementation of hook_features_export().
 */
function messaging_features_export($data, &$export, $module_name = '') {
  foreach ($data as $preset) {
    $export['features']['messaging'][$preset] = $preset;
  }
}

/**
 * Implementation of hook_features_export_render().
 */
function messaging_features_export_render($module_name = 'messaging', $data) {
  foreach ($data as $key) {
    $args = explode('::', $key);
    $message = db_result(db_query("SELECT message FROM {messaging_message_parts} WHERE type = '%s' AND msgkey = '%s' AND method = '%s'", $args));
    $presets[$key] = $message;
  }
  $code = "  \$message_parts = ". features_var_export($presets, '  ') .";\n";
  $code .= '  return $message_parts;';
  return array('messaging_features_store' => $code);
}

/**
 * Implementation of hook_features_revert().
 */
function messaging_features_revert($module = 'messaging') {
  module_load_include('inc', 'messaging', 'messaging.admin');
  $defaults = module_invoke($module, 'messaging_features_store');
  if (empty($defaults)) {
    return;
  }
  $settings = array();
  foreach ($defaults as $key => $message) {
    list($type, $msgkey, $method) = explode('::', $key);
    $settings[$type][$msgkey][$method] = $message;
  }
  foreach ($settings as $group => $messages) {
    $form_values = array(
      'values' => array(
        'group' => $group,
        'messages' => $messages,
      ),
    );
    messaging_admin_message_form_submit(array(), $form_values);
  }
}
