diff options
Diffstat (limited to 'types/videoupload/videoupload.module')
-rw-r--r-- | types/videoupload/videoupload.module | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/types/videoupload/videoupload.module b/types/videoupload/videoupload.module new file mode 100644 index 0000000..9664e1e --- /dev/null +++ b/types/videoupload/videoupload.module @@ -0,0 +1,146 @@ +<?php +// $Id$ + +/** + * @file + * uploadfield core hooks and menu callbacks. + */ + +module_load_include('inc', 'uploadfield', 'uploadfield_widget'); + +/** + * Implementation of hook_perm(). + */ +function uploadfield_perm() { + return array('use default thumbnail', 'bypass conversion video'); +} + +/** + * Implementation of hook_theme(). + */ +function uploadfield_theme() { + $theme = array(); + $theme['uploadfield_widget'] = array( + 'arguments' => array('element' => NULL), + 'file' => 'uploadfield.theme.inc', + ); + $theme['uploadfield_widget_item'] = array( + 'arguments' => array('element' => NULL), + 'file' => 'uploadfield.theme.inc', + ); + return $theme; +} + +/** + * Implementation of CCK's hook_widget_info(). + */ +function uploadfield_widget_info() { + return array( + 'uploadfield_widget' => array( + 'label' => t('Video'), + 'field types' => array('filefield'), + 'multiple values' => CONTENT_HANDLE_CORE, + 'callbacks' => array('default value' => CONTENT_CALLBACK_CUSTOM), + 'description' => t('An edit widget for video files, including video thumbnails and transcoding to flash.'), + ), + ); +} + + +/** + * Implementation of hook_elements(). + */ +function uploadfield_elements() { + $elements = array(); + // An uploadfield is really just a FileField with extra processing. + $filefield_elements = module_invoke('filefield', 'elements'); + $elements['uploadfield_widget'] = $filefield_elements['filefield_widget']; + $elements['uploadfield_widget']['#process'][] = 'uploadfield_widget_process'; + $elements['uploadfield_widget']['#element_validate'][] = 'uploadfield_widget_validate'; + // uploadfield needs a separate value callback to save its alt and title texts. + $elements['uploadfield_widget']['#value_callback'] = 'uploadfield_widget_value'; + return $elements; +} + +/** + * Implementation of hook_file_download. + */ +function uploadfield_file_download($filepath) { + // Return headers for default images. + if (strpos($filepath, 'video_thumbs') !== FALSE) { + $full_path = file_create_path($filepath); + if ($info = getimagesize($full_path)) { + return array( + 'Content-Type: ' . $info['mime'], + 'Content-Length: ' . filesize($full_path) + ); + } + } +} + +/** + * Implementation of CCK's hook_widget_settings(). + */ +function uploadfield_widget_settings($op, $widget) { + switch ($op) { + case 'form': + return uploadfield_widget_settings_form($widget); + case 'validate': + return uploadfield_widget_settings_validate($widget); + case 'save': + return uploadfield_widget_settings_save($widget); + } +} + +/** + * Implementation of hook_widget(). + */ +function uploadfield_widget(&$form, &$form_state, $field, $items, $delta = NULL) { + $item = array('fid' => 0, 'list' => $field['list_default'], 'data' => array('description' => '', 'video_thumb' => '')); + if (isset($items[$delta])) { + $item = array_merge($item, $items[$delta]); + } + return filefield_widget($form, $form_state, $field, $items, $delta); +} + +/** + * Implementation of CCK's hook_default_value(). + */ +function uploadfield_default_value(&$form, &$form_state, $field, $delta) { + return filefield_default_value($form, $form_state, $field, $delta); +} + +/** + * Implementation of hook_form_[form_id]_alter(). + * + * Modify the add new field form to make "Video" the default formatter. + */ +function uploadfield_form_content_field_overview_form_alter(&$form, &$form_state) { + $form['#submit'][] = 'uploadfield_form_content_field_overview_submit'; +} + +/** + * Submit handler to set a new field's formatter to "video_plain". + */ +function uploadfield_form_content_field_overview_submit(&$form, &$form_state) { + if (isset($form_state['fields_added']['_add_new_field']) && isset($form['#type_name'])) { + $new_field = $form_state['fields_added']['_add_new_field']; + $node_type = $form['#type_name']; + $field = content_fields($new_field, $node_type); + if ($field['widget']['module'] == 'uploadfield') { + foreach ($field['display_settings'] as $display_type => $display_settings) { + if ($field['display_settings'][$display_type]['format'] == 'default') { + $field['display_settings'][$display_type]['format'] = 'video_plain'; + } + } + content_field_instance_update($field); + } + } +} + +/** + * filefield source support + */ +function uploadfield_filefield_sources_widgets() { + return array('uploadfield_widget'); +}
\ No newline at end of file |