# This patch file was generated by NetBeans IDE
# This patch can be applied using context Tools: Apply Diff Patch action on respective folder.
# It uses platform neutral UTF-8 encoding.
# Above lines and this line are ignored by the patching process.
Index: contributions/modules/ffmpeg_converter/ffmpeg_converter.admin.inc
--- contributions/modules/ffmpeg_converter/ffmpeg_converter.admin.inc Base (1.7)
+++ contributions/modules/ffmpeg_converter/ffmpeg_converter.admin.inc Locally Modified (Based On 1.7)
@@ -8,410 +8,6 @@
  */
 
 /**
- * Page callback: presets overview.
- */
-function ffmpeg_converter_admin_presets() {
-  $help = t('Use this page to create and modify FFmpeg configuration presets which you can use to process media files automatically.');
-  if (module_exists('filefield') && module_exists('rules')) {
-    $help .= ' ' . t('Your presets will appear in <a href="@rules">Rules</a> using the "Queue file field for conversion" action, which lets you create rules that convert all media files that are uploaded to a certain file field automatically.', array('@rules', url('admin/rules/trigger')));
-  }
-  else {
-    $help .= ' ' . t('If you install and enable the Rules and FileField modules, your presets will appear on rule configuration pages, which allows you to have all media files that are uploaded to a certain file field processed automatically.');
-  }
-  $help .= ' ' . t('Other modules may also make this conversion functionality available in their own specific contexts.');
-  $help = '<div class="ffmpeg-converter-help">' . $help . '</div>';
-
-  // Load presets and present them in table form.
-  $presets = ffmpeg_converter_preset_load();
-  $header = array(t('Description'), t('Name'), t('Source'), '', '', '');
-  $rows = array();
-
-  foreach ($presets as $key => $preset) {
-    $row = array();
-    $row[0] = check_plain($preset->description);
-    $row[1] = check_plain($preset->name);
-
-    $row[3] = l(t('Edit'),
-      'admin/settings/ffmpeg_converter/presets/edit/' . $preset->name,
-      array('attributes' => array('class' => 'link-edit')));
-    switch ($preset->export_type) {
-      case 1:
-        // "Normal" type.
-        $row[2] = '<em>' . t('Normal') . '</em>';
-        $row[4] = l(t('Delete'),
-          'admin/settings/ffmpeg_converter/presets/delete/' . $preset->name,
-          array('attributes' => array('class' => 'link-delete')));
-        break;
-      case 3:
-        // "Overridden" type.
-        $row[2] = '<em>' . t('Overridden') . '</em>';
-        $row[4] = l(t('Revert'),
-          'admin/settings/ffmpeg_converter/presets/delete/' . $preset->name,
-          array('attributes' => array('class' => 'link-delete')));
-        break;
-      default:
-        $row[2] = '<em>' . t('Default') . '</em>';
-        $row[4] = '';
-    }
-    $row[5] = l(t('Export'),
-      'admin/settings/ffmpeg_converter/presets/export/' . $preset->name,
-      array('attributes' => array('class' => 'link-export')));
-    ksort($row);
-
-    $rows[] = $row;
-  }
-
-  $table = theme('table', $header, $rows);
-
-  // Add links beneath the table.
-  $links = array(
-    'link-add' => array(
-      'title' => t('Add preset'),
-      'href' => 'admin/settings/ffmpeg_converter/presets/add',
-    ),
-    'link-import' => array(
-      'title' => t('Import preset'),
-      'href' => 'admin/settings/ffmpeg_converter/presets/import',
-    ),
-  );
-  $links = theme('links', $links, array('class' => 'ffmpeg-converter-presets-links'));
-
-  return $help . $table . $links;
-}
-
-
-/**
- * Preset settings form.
- *
- * @param $name
- *   The preset's machine readable name.
- */
-function ffmpeg_converter_admin_preset($form_state, $preset = NULL) {
-  // Check if we're supposed to edit a preset or add a new one.
-  if ($preset) {
-    drupal_set_title(t('#name settings', array('#name' => check_plain($preset->description))));
-  }
-  else {
-    $preset = new stdClass;
-    $preset->name = '';
-    $preset->description = '';
-    $preset_options = ffmpeg_converter_default_options();
-    $preset->ffmpeg_wrapper = $preset_options;
-  }
-  
-  $form = array();
-  $form['intro'] = array();
-
-  $form['name'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Preset name'),
-    '#description' => t('The unique, machine readable name of this preset.'),
-    '#default_value' => $preset->name,
-    '#size' => 20,
-    '#required' => true,
-  );
-  $form['description'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Preset description'),
-    '#description' => t('The human readable name or description of this preset.'),
-    '#default_value' => $preset->description,
-    '#size' => 20,
-    '#required' => true,
-  );
-
-  // Add FFmpeg Wrapper's configuration form.
-  $form += ffmpeg_wrapper_configuration_form($preset->ffmpeg_wrapper, "edit-ffmpeg-converter-presets-$preset->name-ffmpeg-wrapper-");
-  $form['ffmpeg_wrapper']['#collapsible'] = true;
-  $form['ffmpeg_wrapper']['#tree'] = true;
-
-  // Check this preset's export type/storage.
-  if (isset($preset->export_type)) {
-    switch ($preset->export_type) {
-      case 1:
-        // "Normal" type.
-        $form['intro']['#value'] = t('<strong>Status: normal</strong><br />This preset is defined in the database.');
-        break;
-      case 2:
-        // "Default" type.
-        $form['intro']['#value'] = t('<strong>Status: default</strong><br />This preset is defined in code.');
-        $form['name']['#disabled'] = true;
-        $form['name']['#value'] = $form['name']['#default_value'];
-        break;
-      case 3:
-        // "Overridden" type.
-        $form['intro']['#value'] = t('<strong>Status: overridden</strong><br />This preset is defined in code and overridden in the database.');
-        $form['name']['#disabled'] = true;
-        $form['name']['#value'] = $form['name']['#default_value'];
-        break;
-    }
-  }
-  else {
-    unset($form['intro']);
-  }
-
-  // Save extra preset info for the submit handler.
-  if (!empty($preset->pid)) {
-    $form['pid'] = array(
-      '#type' => 'value',
-      '#value' => $preset->pid,
-    );
-  }
-  if (!empty($preset->export_type)) {
-    $form['export_type'] = array(
-      '#type' => 'value',
-      '#value' => $preset->export_type,
-    );
-  }
-
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save')
-  );
-
-  return $form;
-
-}
-
-
-/**
- * Validate a preset form.
- */
-function ffmpeg_converter_admin_preset_validate($form, &$form_state) {
-  // Check for illegal characters in preset names.
-  if (preg_match('/[^0-9a-zA-Z_\-]/', $form_state['values']['name'])) {
-    form_set_error('name', t('Please only use alphanumeric characters, underscores (_), and hyphens (-) for preset names.'));
-  }
-}
-
-/**
- * Submit handler to save a preset.
- */
-function ffmpeg_converter_admin_preset_submit($form, &$form_state) {
-
-  // Serialize ffmpeg_wrapper data.
-  $form_state['values']['ffmpeg_wrapper'] = serialize($form_state['values']['ffmpeg_wrapper']);
-
-  if (empty($form_state['values']['pid'])) {
-    // Save new preset.
-    if (drupal_write_record('ffmpeg_converter_preset', $form_state['values'])) {
-      if (empty($form_state['values']['export_type'])) {
-        drupal_set_message(t('Created preset %preset.', array('%preset' => $form_state['values']['description'])));
-      }
-      else {
-        // This is an existing default preset that is being overriden.
-        drupal_set_message(t('Updated preset %preset.', array('%preset' => $form_state['values']['description'])));
-      }
-    }
-    else {
-      drupal_set_message(t('Failed to create a new preset.'), 'warning');
-    }
-  }
-  else {
-    // Save existing preset.
-    if (drupal_write_record('ffmpeg_converter_preset', $form_state['values'], 'pid')) {
-      drupal_set_message(t('Updated preset %preset.', array('%preset' => $form_state['values']['description'])));
-    }
-    else {
-      drupal_set_message(t('Failed to update preset %preset.', array('%preset' => $form_state['values']['description'])), 'warning');
-    }
-  }
-
-  drupal_goto('admin/settings/ffmpeg_converter/presets');
-}
-
-
-/**
- * Delete preset form.
- *
- * @param $name
- *   The preset's machine readable name.
- */
-function ffmpeg_converter_admin_preset_delete($form_state, $preset) {
-  $form = array();
-  $form['pid'] = array(
-    '#type' => 'value',
-    '#value' => $preset->pid,
-  );
-  // Save a couple of values for the submit handler.
-  $form['preset_description'] = array( // 'description' is used by confirm_form().
-    '#type' => 'value',
-    '#value' => $preset->description,
-  );
-  $form['export_type'] = array(
-    '#type' => 'value',
-    '#value' => $preset->export_type,
-  );
-
-  // Adjust the UI texts depending on export type.
-  switch ($preset->export_type) {
-    case 1:
-      // "Normal" type.
-      $message = t('Are you sure you want to delete %title?', array('%title' => $preset->description));
-      $button = t('Delete');
-      break;
-    case 3:
-      // "Overridden" type.
-      $message = t('Are you sure you want to revert %title?', array('%title' => $preset->description));
-      $button = t('Revert');
-      break;
-    default:
-      // There are no other export types that can be deleted.
-      drupal_goto('admin/settings/ffmpeg_converter');
-      return array();
-  }
-
-  return confirm_form($form,
-    $message,
-    isset($_GET['destination']) ? $_GET['destination'] : 'admin/settings/ffmpeg_converter',
-    t('This action cannot be undone. If you are using this preset in other parts of your system, you should change those settings first.'),
-    $button,
-    t('Cancel')
-  );
-
-}
-
-
-/**
- * Submit handler to delete a preset.
- */
-function ffmpeg_converter_admin_preset_delete_submit($form, &$form_state) {
-  if ($form_state['values']['confirm']) {
-    ffmpeg_converter_preset_delete($form_state['values']['pid']);
-    // Adjust message depending on export type.
-    $message = $form_state['values']['export_type'] == 1 ?
-      'Deleted preset %preset.' :
-      'Reverted preset %preset.';
-    drupal_set_message(t($message, array('%preset' => $form_state['values']['preset_description'])));
-  }
-  $form_state['redirect'] = 'admin/settings/ffmpeg_converter/presets';
-}
-
-
-/**
- * Page callback: export a preset.
- * 
- * @param $preset
- *   A preset object.
- */
-function ffmpeg_converter_admin_preset_export($form_state, $preset) {
-  drupal_set_title(t('Export of preset %description', array('%description' => $preset->description)));
-  $form = array();
-
-  // Get export code with Ctools.
-  $export = ctools_export_object('ffmpeg_converter_preset', $preset);
-  $export = "<?php\n{$export}return serialize(\$preset);\n?>";
-
-  // Create the export code textarea.
-  ctools_include('export');
-  $form['export'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Preset code'),
-    '#rows' => 20,
-    '#default_value' => $export,
-    '#description' => t('Copy and paste this code into the text area on the Import page on a different site if you want to create an identical copy of this preset, You can also use it to define a default preset in your custom code (see below).'),
-  );
-
-  // Generate example code for a preset definition in a custom module .
-  $code = <<<EOD
-<?php
-
-/**
- * Implementation of hook_ctools_plugin_api().
- */
-function mymodule_ctools_plugin_api(\$owner, \$api) {
-  if (\$owner == 'ffmpeg_converter' && \$api == 'default_ffmpeg_converter_presets') {
-    return array('version' => 1);
-  }
-}
-
-/**
- * Implementation of hook_default_ffmpeg_converter_preset().
- */
-function mymodule_default_ffmpeg_converter_preset() {
-  \$export = array();
-
-%s
-  \$export['%s'] = \$preset;
-
-  return \$export;
-}
-
-?>
-EOD;
-  $code = sprintf($code, ctools_export_object('ffmpeg_converter_preset', $preset, '  '), $preset->name);
-  $code = highlight_string($code, true);
-
-  // Show the example code in a fieldset.
-  $form['default'] = array(
-    '#type' => 'fieldset',
-    '#collapsible' => true,
-    '#title' => t('Example default preset implementation'),
-    '#description' => t('This is an example implementation of a default preset based on #preset, as defined by a custom module called <em>mymodule</em>. This is also similar to how presets are defined when exported by the <a href="@features_url">Features</a> module.',
-      array('#preset' => $preset->description, '@features_url' => 'http://drupal.org/project/features')),
-  );
-  $form['default']['code'] = array(
-    '#value' => $code
-  );
-  return $form;
-}
-
-
-/**
- * Page callback: import presets.
- */
-function ffmpeg_converter_admin_preset_import() {
-  $form = array();
-  $form['import'] = array(
-    '#type' => 'textarea',
-    '#rows' => 10,
-    '#description' => t('Paste your exported preset code here. You can only import one preset at a time. The code should have &lt;?php ?&gt; tags and return a serialized preset object.'),
-  );
-  $form['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Import')
-  );
-  return $form;
-}
-
-
-/**
- * Validate a preset import.
- */
-function ffmpeg_converter_admin_preset_import_validate($form, &$form_state) {
-  // Run the import code, which should return a serialized $preset object.
-  $preset = unserialize(drupal_eval($form_state['values']['import']));
-  if (empty($preset) || !is_object($preset) || empty($preset->name)) {
-    form_set_error('import', t('The submitted preset code could not be interperated.'));
-  }
-  elseif (ffmpeg_converter_preset_load($preset->name)) {
-    form_set_error('import', t('A preset by that name already exists.'));
-  }
-  else {
-    // Pass the parsed object on to the submit handler.
-    $form_state['values']['import_parsed'] = $preset;
-  }
-}
-
-
-/**
- * Submit handler to import a preset.
- */
-function ffmpeg_converter_admin_preset_import_submit($form, &$form_state) {
-  $preset = (array) $form_state['values']['import_parsed'];
-  $preset['ffmpeg_wrapper'] = serialize($preset['ffmpeg_wrapper']);
-
-  if (drupal_write_record('ffmpeg_converter_preset', $preset)) {
-    drupal_set_message(t('Imported preset %preset.', array('%preset' => $preset['description'])));
-  }
-  else {
-    drupal_set_message(t('Failed to import the preset.'), 'warning');
-  }
-  
-  $form_state['redirect'] = 'admin/settings/ffmpeg_converter/presets';
-}
-
-
-/**
  * Page callback: debug settings form.
  */
 function ffmpeg_converter_admin_debug() {
Index: contributions/modules/ffmpeg_converter/ffmpeg_converter.module
--- contributions/modules/ffmpeg_converter/ffmpeg_converter.module Base (1.43)
+++ contributions/modules/ffmpeg_converter/ffmpeg_converter.module Locally Modified (Based On 1.43)
@@ -8,71 +8,25 @@
  * This module lets you setup automatic media file conversions with FFmpeg.
  */
 
+/**
+ * Minimum CTools version needed.
+ */
+define('FFMPEG_CONVERTER_REQUIRED_CTOOLS_API', '1.7');
 
+
 /**
  * Implementation of hook_menu().
  */
 function ffmpeg_converter_menu() {
   $items = array();
-  $items['admin/settings/ffmpeg_converter'] = array(
-    'title' => 'FFmpeg Converter',
-    'description' => t('Setup automatic media file conversion.'),
-    'page callback' => 'ffmpeg_converter_admin_presets',
-    'access arguments' => array('administer ffmpeg wrapper'),
-    'file' => 'ffmpeg_converter.admin.inc',
-  );
-  $items['admin/settings/ffmpeg_converter/presets'] = array(
-    'title' => 'Presets',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  );
-  $items['admin/settings/ffmpeg_converter/presets/add'] = array(
-    'title' => 'Create new preset',
-    'file' => 'ffmpeg_converter.admin.inc',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('ffmpeg_converter_admin_preset'),
-    'access arguments' => array('administer ffmpeg wrapper'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['admin/settings/ffmpeg_converter/presets/edit/%ffmpeg_converter_preset'] = array(
-    'title' => 'Preset settings',
-    'file' => 'ffmpeg_converter.admin.inc',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('ffmpeg_converter_admin_preset', 5),
-    'access arguments' => array('administer ffmpeg wrapper'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['admin/settings/ffmpeg_converter/presets/delete/%ffmpeg_converter_preset'] = array(
-    'title' => 'Delete preset',
-    'file' => 'ffmpeg_converter.admin.inc',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('ffmpeg_converter_admin_preset_delete', 5),
-    'access arguments' => array('administer ffmpeg wrapper'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['admin/settings/ffmpeg_converter/presets/export/%ffmpeg_converter_preset'] = array(
-    'title' => 'Export preset',
-    'file' => 'ffmpeg_converter.admin.inc',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('ffmpeg_converter_admin_preset_export', 5),
-    'access arguments' => array('administer ffmpeg wrapper'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['admin/settings/ffmpeg_converter/presets/import'] = array(
-    'title' => 'Import preset',
-    'file' => 'ffmpeg_converter.admin.inc',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('ffmpeg_converter_admin_preset_import'),
-    'access arguments' => array('administer ffmpeg wrapper'),
-    'type' => MENU_CALLBACK,
-  );
-  $items['admin/settings/ffmpeg_converter/debug'] = array(
+  $items['admin/build/ffmpeg_converter/debug'] = array(
     'title' => 'Debugging',
     'type' => MENU_LOCAL_TASK,
     'page callback' => 'drupal_get_form',
     'page arguments' => array('ffmpeg_converter_admin_debug'),
     'access arguments' => array('administer ffmpeg wrapper'),
     'file' => 'ffmpeg_converter.admin.inc',
+    'weight' => 9,
   );
   
   return $items;
@@ -102,17 +56,8 @@
     $preset->ffmpeg_wrapper = empty($preset->ffmpeg_wrapper) ? array() : $preset->ffmpeg_wrapper;
     $preset->ffmpeg_wrapper = is_array($preset->ffmpeg_wrapper) ? $preset->ffmpeg_wrapper : unserialize($preset->ffmpeg_wrapper);
     // Flatten the ffmpeg_wrapper array of options.
-    $options = array();
-    foreach ($preset->ffmpeg_wrapper as $opt_key => $option) {
-      if (is_array($option)) {
-        $options = array_merge($options, $option);
+    $preset->ffmpeg_wrapper = _ffmpeg_converter_array_flatten($preset->ffmpeg_wrapper);
       }
-      else {
-        $options[$opt_key] = $option;
-      }
-    }
-    $preset->ffmpeg_wrapper = $options;
-  }
   
   if ($name) {
     return isset($presets[$name]) ? $presets[$name] : FALSE;
@@ -152,6 +97,21 @@
 
 
 /**
+ * Implementation of hook_ctools_plugin_directory().
+ */
+function ffmpeg_converter_ctools_plugin_directory($module, $type) {
+  // Safety: go away if CTools is not at an appropriate version.
+  if (!module_invoke('ctools', 'api_version', FFMPEG_CONVERTER_REQUIRED_CTOOLS_API)) {
+    return;
+  }
+
+  if ($type =='export_ui') {
+    return 'plugins/export_ui';
+  }
+}
+
+
+/**
  * Implementation of hook_default_ffmpeg_converter_preset().
  * 
  * Provide a couple of default presets.
@@ -643,3 +603,28 @@
     return ($return == 'size') ? $size : $pad;
   }
 }
+
+/**
+ * Helper function to flatten nested arrays, while maintaining keys.
+ *
+ * @param $array
+ *   Input array.
+ * @param $f
+ *   Array argument used internally for recursive calls.
+ * @return
+ *   Flattened array.
+ */
+function _ffmpeg_converter_array_flatten($array, $f = array()){
+  if (!$array || !is_array($array)) {
+    return '';
+  }
+  foreach($array as $k => $v) {
+    if (is_array($v)) {
+      $f = _ffmpeg_converter_array_flatten($v, $f);
+    }
+    else {
+      $f[$k] = $v;
+    }
+  }
+  return $f;
+}
Index: contributions/modules/ffmpeg_converter/plugins/export_ui/ffmpeg_converter_ctools_export_ui.inc
--- contributions/modules/ffmpeg_converter/plugins/export_ui/ffmpeg_converter_ctools_export_ui.inc No Base Revision
+++ contributions/modules/ffmpeg_converter/plugins/export_ui/ffmpeg_converter_ctools_export_ui.inc Locally New
@@ -0,0 +1,97 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Define the export_ui Ctools plugin for FFmpeg Converter presets.
+ */
+
+/**
+ * Define the plugin.
+ */
+$plugin = array(
+  'schema' => 'ffmpeg_converter_preset',
+  'access' => 'administer ffmpeg wrapper',
+  'menu' => array(
+    'menu item' => 'ffmpeg_converter',
+    'menu title' => 'FFmpeg Converter',
+    'menu description' => 'Administer FFmpeg Converter presets',
+  ),
+
+  'title singular' => t('preset'),
+  'title plural' => t('presets'),
+  'title singular proper' => t('FFmpeg Converter preset'),
+  'title plural proper' => t('FFmpeg Converter presets'),
+  'handler' => array(
+    'class' => 'ffmpeg_converter_presets_ui',
+    'parent' => 'ctools_export_ui',
+  ),
+);
+
+/**
+ * Define the preset form.
+ */
+function ffmpeg_converter_ctools_export_ui_form(&$form, &$form_state) {
+  $preset = $form_state['item'];
+
+  // Prepare the ffmpeg_wrapper settings array.
+  if (!empty($preset->ffmpeg_wrapper) && is_string($preset->ffmpeg_wrapper)) {
+    $preset->ffmpeg_wrapper = unserialize($preset->ffmpeg_wrapper);
+  }
+  if (empty($preset->ffmpeg_wrapper)) {
+    $preset = new stdClass;
+    $preset->name = '';
+    $preset->description = '';
+    $preset->ffmpeg_wrapper = ffmpeg_converter_default_options();
+  }
+
+  $form['description'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Description'),
+    '#description' => t('The human readable name or description of this preset.'),
+    '#default_value' => $preset->description,
+    '#required' => true,
+  );
+
+  // Add FFmpeg Wrapper's configuration form.
+  $preset->ffmpeg_wrapper = _ffmpeg_converter_array_flatten($preset->ffmpeg_wrapper);
+  $form += ffmpeg_wrapper_configuration_form($preset->ffmpeg_wrapper, "edit-ffmpeg-converter-presets-$preset->name-ffmpeg-wrapper-");
+  $form['ffmpeg_wrapper']['#collapsible'] = true;
+  $form['ffmpeg_wrapper']['#tree'] = true;
+
+  // Check this preset's export type/storage.
+  if (isset($preset->export_type)) {
+    $form['intro'] = array('#weight' => -1);
+    switch ($preset->export_type) {
+      case 1:
+        // "Normal" type.
+        $form['intro']['#value'] = t('<strong>Status: normal</strong><br />This preset is defined in the database.');
+        break;
+      case 2:
+        // "Default" type.
+        $form['intro']['#value'] = t('<strong>Status: default</strong><br />This preset is defined in code.');
+        break;
+      case 3:
+        // "Overridden" type.
+        $form['intro']['#value'] = t('<strong>Status: overridden</strong><br />This preset is defined in code and overridden in the database.');
+        break;
+    }
+  }
+
+  // Add a custom submit handler.
+  $form['#submit'] = empty($form['#submit']) ? array() : $form['#submit'];
+  $form['#submit'] = array('ffmpeg_converter_ctools_export_ui_form_submit') + $form['#submit'];
+
+}
+
+/**
+ * Submit handler for the preset edit form.
+ */
+function ffmpeg_converter_ctools_export_ui_form_submit($form, &$form_state) {
+  // Serialize the ffmpeg_wrapper settings array into a string.
+  $form_state['item']->ffmpeg_wrapper = serialize($form_state['values']['ffmpeg_wrapper']);
+
+  // Should we really have to do this?
+  $form_state['item']->name = $form_state['values']['name'];
+  $form_state['item']->description = $form_state['values']['description'];
+}
Index: contributions/modules/ffmpeg_converter/plugins/export_ui/ffmpeg_converter_presets_ui.class.php
--- contributions/modules/ffmpeg_converter/plugins/export_ui/ffmpeg_converter_presets_ui.class.php No Base Revision
+++ contributions/modules/ffmpeg_converter/plugins/export_ui/ffmpeg_converter_presets_ui.class.php Locally New
@@ -0,0 +1,34 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Define the ffmpeg_converter_presets_ui class.
+ */
+
+/**
+ * Export UI class for FFmpeg Converter presets.
+ */
+class ffmpeg_converter_presets_ui extends ctools_export_ui {
+
+  /**
+   * Alter the preset list form defined by the base class.
+   */
+  function list_form(&$form, &$form_state) {
+    parent::list_form($form, $form_state);
+
+    $help = t('Use this page to create and modify FFmpeg configuration presets which you can use to process media files automatically.');
+    if (module_exists('filefield') && module_exists('rules')) {
+      $help .= ' ' . t('Your presets will appear in <a href="@rules">Rules</a> using the "Queue file field for conversion" action, which lets you create rules that convert all media files that are uploaded to a certain file field automatically.', array('@rules', url('admin/rules/trigger')));
+    }
+    else {
+      $help .= ' ' . t('If you install and enable the Rules and FileField modules, your presets will appear on rule configuration pages, which allows you to have all media files that are uploaded to a certain file field processed automatically.');
+    }
+    $help .= ' ' . t('Other modules may also make this conversion functionality available in their own specific contexts.');
+    $help = '<p class="ffmpeg-converter-help">' . $help . '</p>';
+
+    $form['#prefix'] .= $help;
+
+  }
+
+}
