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'); }