aboutsummaryrefslogtreecommitdiff
path: root/types/videoftp/videoftp.module
diff options
context:
space:
mode:
Diffstat (limited to 'types/videoftp/videoftp.module')
-rw-r--r--types/videoftp/videoftp.module207
1 files changed, 207 insertions, 0 deletions
diff --git a/types/videoftp/videoftp.module b/types/videoftp/videoftp.module
new file mode 100644
index 0000000..078d81c
--- /dev/null
+++ b/types/videoftp/videoftp.module
@@ -0,0 +1,207 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * video ftp core hooks and menu callbacks.
+ */
+
+module_load_include('inc', 'videoftp', 'videoftp_widget');
+
+/*
+ * Implementation of hook_menu().
+ */
+function videoftp_menu() {
+ $items = array();
+ $items['videoftp/ahah/%/%/%'] = array(
+ 'page callback' => 'videoftp_js',
+ 'page arguments' => array(2, 3, 4),
+ //'access callback' => 'videoftp_edit_access',
+ 'access arguments' => array('access content'),
+ 'type' => MENU_CALLBACK,
+ );
+ $items['videoftp/progress'] = array(
+ 'page callback' => 'videoftp_progress',
+ 'access arguments' => array('access content'),
+ 'type' => MENU_CALLBACK,
+ );
+ return $items;
+}
+
+/**
+ * Implementation of hook_theme().
+ */
+function videoftp_theme() {
+ $theme = array();
+ $theme['videoftp_widget'] = array(
+ 'arguments' => array('element' => NULL),
+ 'file' => 'videoftp.theme.inc',
+ );
+ $theme['videoftp_widget_item'] = array(
+ 'arguments' => array('element' => NULL),
+ 'file' => 'videoftp.theme.inc',
+ );
+ $theme['videoftp_widget_file'] = array(
+ 'arguments' => array('element' => NULL),
+ 'file' => 'videoftp.theme.inc',
+ );
+ return $theme;
+}
+
+/**
+ * Implementation of CCK's hook_widget_info().
+ */
+function videoftp_widget_info() {
+ return array(
+ 'videoftp_widget' => array(
+ 'label' => t('Video FTP'),
+ 'field types' => array('filefield'),
+ 'multiple values' => CONTENT_HANDLE_CORE,
+ 'callbacks' => array('default value' => CONTENT_CALLBACK_CUSTOM),
+ 'description' => t('Widget allows you to select video files uploaded through FTP to be attached to the node.'),
+ ),
+ );
+}
+
+/**
+ * Implementation of hook_elements().
+ */
+function videoftp_elements() {
+ return array(
+ 'videoftp_widget' => array(
+ '#input' => TRUE,
+ '#columns' => array('fid', 'list', 'data', 'filepath'),
+ '#process' => array('videoftp_widget_process'),
+ '#value_callback' => 'videoftp_widget_value',
+ ),
+ );
+}
+
+/**
+ * Implementation of CCK's hook_widget_settings().
+ */
+function videoftp_widget_settings($op, $widget) {
+ //load up our include file for the widget
+ module_load_include('inc', 'videoftp', 'videoftp_widget');
+ switch ($op) {
+ case 'form':
+ return videoftp_widget_settings_form($widget);
+ case 'validate':
+ return videoftp_widget_settings_validate($widget);
+ case 'save':
+ return videoftp_widget_settings_save($widget);
+ }
+}
+
+/**
+ * Implementation of hook_widget().
+ */
+function videoftp_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]);
+ }
+ $element = array(
+ '#title' => $field['widget']['label'],
+ '#type' => $field['widget']['type'],
+ '#default_value' => $item,
+ );
+ return $element;
+}
+
+/**
+ * Menu callback; Shared AHAH callback for ftp file attachment and deletions.
+ *
+ * This rebuilds the form element for a particular field item. As long as the
+ * form processing is properly encapsulated in the widget element the form
+ * should rebuild correctly using FAPI without the need for additional callbacks
+ * or processing.
+ */
+function videoftp_js($type_name, $field_name, $delta) {
+ module_load_include('inc', 'videoftp', 'videoftp_widget');
+ $field = content_fields($field_name, $type_name);
+
+ if (empty($field) || empty($_POST['form_build_id'])) {
+ // Invalid request.
+ drupal_set_message(t('An unrecoverable error occurred.'), 'error');
+ print drupal_to_js(array('data' => theme('status_messages')));
+ exit;
+ }
+
+ // Build the new form.
+ $form_state = array('submitted' => FALSE);
+ $form_build_id = $_POST['form_build_id'];
+ $form = form_get_cache($form_build_id, $form_state);
+
+ if (!$form) {
+ // Invalid form_build_id.
+ drupal_set_message(t('An unrecoverable error occurred. This form was missing from the server cache. Try reloading the page and submitting again.'), 'error');
+ print drupal_to_js(array('data' => theme('status_messages')));
+ exit;
+ }
+
+ // Build the form. This calls the file field's #value_callback function and
+ // saves the uploaded file. Since this form is already marked as cached
+ // (the #cache property is TRUE), the cache is updated automatically and we
+ // don't need to call form_set_cache().
+ $args = $form['#parameters'];
+ $form_id = array_shift($args);
+ $form['#post'] = $_POST;
+ $form = form_builder($form_id, $form, $form_state);
+
+ // Update the cached form with the new element at the right place in the form.
+ if (module_exists('fieldgroup') && ($group_name = _fieldgroup_field_get_group($type_name, $field_name))) {
+ if (isset($form['#multigroups']) && isset($form['#multigroups'][$group_name][$field_name])) {
+ $form_element = $form[$group_name][$delta][$field_name];
+ }
+ else {
+ $form_element = $form[$group_name][$field_name][$delta];
+ }
+ }
+ else {
+ $form_element = $form[$field_name][$delta];
+ }
+
+ if (isset($form_element['_weight'])) {
+ unset($form_element['_weight']);
+ }
+ $output = drupal_render($form_element);
+ // AHAH is not being nice to us and doesn't know the "other" button (that is,
+ // either "Attach" or "Delete") yet. Which in turn causes it not to attach
+ // AHAH behaviours after replacing the element. So we need to tell it first.
+
+ // Loop through the JS settings and find the settings needed for our buttons.
+ $javascript = drupal_add_js(NULL, NULL);
+ $videoftp_ahah_settings = array();
+ if (isset($javascript['setting'])) {
+ foreach ($javascript['setting'] as $settings) {
+ if (isset($settings['ahah'])) {
+ foreach ($settings['ahah'] as $id => $ahah_settings) {
+ if (strpos($id, 'videoftp-attach') || strpos($id, 'videoftp-remove')) {
+ $videoftp_ahah_settings[$id] = $ahah_settings;
+ }
+ }
+ }
+ }
+ }
+
+ // Add the AHAH settings needed for our new buttons.
+ if (!empty($videoftp_ahah_settings)) {
+ $output .= '<script type="text/javascript">jQuery.extend(Drupal.settings.ahah, '. drupal_to_js($videoftp_ahah_settings) .');</script>';
+ }
+
+ $output = theme('status_messages') . $output;
+
+ // For some reason, file uploads don't like drupal_json() with its manual
+ // setting of the text/javascript HTTP header. So use this one instead.
+ $GLOBALS['devel_shutdown'] = FALSE;
+ print drupal_to_js(array('status' => TRUE, 'data' => $output));
+ exit;
+}
+
+/**
+ * filefield source support
+ */
+function videoftp_filefield_sources_widgets() {
+ return array('videoftp_widget');
+} \ No newline at end of file