aboutsummaryrefslogtreecommitdiff
path: root/types/uploadfield/uploadfield.module
diff options
context:
space:
mode:
Diffstat (limited to 'types/uploadfield/uploadfield.module')
-rw-r--r--types/uploadfield/uploadfield.module146
1 files changed, 146 insertions, 0 deletions
diff --git a/types/uploadfield/uploadfield.module b/types/uploadfield/uploadfield.module
new file mode 100644
index 0000000..9664e1e
--- /dev/null
+++ b/types/uploadfield/uploadfield.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