'click', * * @param array $registration_ids * Array of registrations to call. * @param string $node_type * @param string $field * @param uid $uid * @return array * Drupal FAPI form array. */ function media_build_browser_form($form_state, $registration_ids, $node_type, $field, $uid) { static $id; // We need a static counter for our form element wrapper. $id += 1; // Load our css. $path = drupal_get_path('module', 'media'); drupal_add_css($path .'/media.css'); // Load our specific js for the file selector drupal_add_js($path .'/javascript/media.js'); // Load the md5 library so we can hash the upload filename for use in the meta form. drupal_add_js($path .'/javascript/jquery.md5.js'); $items = array(); $form = array(); $form['media_browser_activate'] = array( '#type' => 'markup', '#value' => '
'. t('Add files') .'
', ); // We are using a tab form type. $form['media_browser'] = array( '#type' => 'tabset', '#attributes' => array('class' => 'media browser wrapper'), ); // Get all the active resources $resources = media_get_resources($registration_ids, $node_type, $field, $uid); // Store the tab & drawer names for the js form selector. $drawer_options = array(); // loop through the form and start pulling out the data to // create tabs -> panes -> drawers foreach ($resources as $tab_name => $data) { // create a tab id $tab_id = strtolower(str_replace(' ', '_', $tab_name)); // create tab $form['media_browser'][$tab_id] = array( '#type' => 'tabpage', '#title' => $tab_name, '#theme' => 'media_browser_pane', ); $drawer_options[$tab_id] = $tab_name; // build the drawers for this tab $drawer_list = array(); $active_drawer = TRUE; // check to see if we do have children- we should, but just in case if (is_array($data)) { $drawers = array(); foreach ($data as $drawer_name => $drawer_data) { // @TODO check drawer access permissions here to make sure we should present this to the user // The drawer id needs to have additional data on it to prevent // name space conflicts with ids $drawer_id = strtolower(str_replace(' ', '_', $drawer_name)) .'_display'; // create a link with a specific id to call $drawers_link = ''. $drawer_name .''; $drawer_list[] = array('data' => $drawers_link, 'class' => ($active_drawer ? 'active' : '') ); // add the drawer form element $form['media_browser'][$tab_id][$drawer_name] = $drawer_data; // add classes to the drawer display item $form['media_browser'][$tab_id][$drawer_name]['#prefix'] = '
'; $form['media_browser'][$tab_id][$drawer_name]['#suffix'] = '
'; // no longer on the first drawer $active_drawer = FALSE; $drawer_options[$tab_id .'|'. $drawer_id] = '- '. $drawer_name; } // change the drawers to a list for easer display $form['media_browser'][$tab_id]['drawers'] = array( '#type' => 'markup', '#value' => theme('item_list', $drawer_list, NULL, 'ul', array('class' => 'drawers')) ); } } $form['media_browser']['drawer_select'] = array( '#type' => 'select', '#title' => t('Drawer select'), '#description' => t('Oh bother, you really should have JavaScript enabled, you know...'), '#options' => $drawer_options, '#prefix' => '
', '#suffix' => '
', ); // Container for the progress indicator. $form['media_browser']['media_browser_file_progress'] = array( '#prefix' => '
', '#suffix' => '
', ); $form['media_browser']['media_browser_file_progress']['file_progress_message'] = array( '#type' => 'item', '#title' => theme('image', media_variable_get('file_progress_image', $path .'/images/uploading-gradient.gif')) . t('Please wait while your file is attached...'), ); // AHAH enabled submit button. $form['media_browser']['media_browser_submit'] = array( '#type' => 'submit', '#value' => t('Add file'), '#description' => t("Add the selected file."), '#submit' => array('media_browser_submit'), // If no javascript action. '#validate' => array('media_browser_validate'), '#attributes' => array('class' => 'media-browser-submit'), '#ahah' => array( 'path' => 'media/js', 'wrapper' => 'media-browser-file-progress-'. $id, 'method' => 'replace', 'effect' => 'fade', 'event' => 'click', ), ); // Container for the metadata submission message. $form['media_browser']['media_browser_metadata_message'] = array( '#prefix' => '
', '#suffix' => '
', ); $form['media_browser']['media_browser_metadata_message']['message'] = array( '#type' => 'item', '#value' => '', ); $form['media_browser']['media_browser_metadata'] = array( '#type' => 'tabset', '#attributes' => array('class' => 'media-browser-metadata-wrapper'), ); // @TODO: This all goes in the form creation, actually, // to create our metadata form... /* $uri = $form_state['values']['media_files']; $file_extension = pathinfo($uri, PATHINFO_EXTENSION); // Get the file creator for this item. $file_creator = media_get_registered_modules(array($registration_id)); // Get the formaters for this node type. $formatters = media_active_fields_for_node_type($node_type, 'formatter'); // Get the registrations. $registrations = media_get_registered_modules($formatters[$field]); // Remove any non-applying registrations. $registrations = media_get_applicable_formatters($registrations, $file_extension); // Get all the formatting forms. $formatter_options = array(); $forms = array(); foreach ($registrations as $id => $registration) { $formatter_options[$id] = $registration['name']; $function = $registration['callbacks']['form']; if (function_exists($function)) { $forms[$id] = $function($node_type, $field, $file_extension, $uri); } } */ // @TODO: This is placeholder only. foreach (array('Video', 'Image', 'Audio', 'PDF') as $mime_type) { $form['media_browser']['media_browser_metadata'][$mime_type] = array( '#type' => 'tabpage', '#title' => $mime_type, ); $form['media_browser']['media_browser_metadata'][$mime_type][$mime_type .'_title'] = array( '#type' => 'textfield', '#title' => t('Title'), ); } // Our AHAH enabled submit button for the metadata. $form['media_browser']['media_browser_metadata_submit'] = array( '#type' => 'submit', '#value' => t('Add metadata'), '#description' => t("Add the selected file."), '#submit' => array('media_browser_metadata_submit'), // If no javascript action. '#validate' => array('media_browser_metadata_validate'), '#attributes' => array('class' => 'media-browser-metadata-submit'), '#ahah' => array( 'path' => 'media/metadata/js', 'wrapper' => 'media-browser-metadata-message-'. $id, 'method' => 'replace', 'effect' => 'fade', 'event' => 'click', ), ); // build the tabs into a single form element // @TODO make sure we have children for each tab and remove any that // we don't have data for $form['tabs'] = array( '#type' => 'markup', '#value' => theme('item_list', $tabs, NULL, 'ul', array('class' => 'tabs')), ); return $form; }