# 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 Rules 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 = '
' . $help . '
';
-
- // 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] = '' . t('Normal') . '';
- $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] = '' . t('Overridden') . '';
- $row[4] = l(t('Revert'),
- 'admin/settings/ffmpeg_converter/presets/delete/' . $preset->name,
- array('attributes' => array('class' => 'link-delete')));
- break;
- default:
- $row[2] = '' . t('Default') . '';
- $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('Status: normal
This preset is defined in the database.');
- break;
- case 2:
- // "Default" type.
- $form['intro']['#value'] = t('Status: default
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('Status: overridden
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 = "";
-
- // 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 = << 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 mymodule. This is also similar to how presets are defined when exported by the Features 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 <?php ?> 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 @@
+ '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('Status: normal
This preset is defined in the database.');
+ break;
+ case 2:
+ // "Default" type.
+ $form['intro']['#value'] = t('Status: default
This preset is defined in code.');
+ break;
+ case 3:
+ // "Overridden" type.
+ $form['intro']['#value'] = t('Status: overridden
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 @@
+Rules 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 = '' . $help . '
';
+
+ $form['#prefix'] .= $help;
+
+ }
+
+}