TRUE, '#process' => array('expand_file_upload_combo'), '#element_validate' => array('file_upload_combo_validate'), ); $type['sequence_combo'] = array( '#input' => TRUE, '#process' => array('expand_sequence_combo'), '#element_validate' => array('sequence_combo_validate'), ); return $type; } /** * Upload File and keep track of previously uploaded files * Form element description */ function expand_file_upload_combo($element, $edit, $form_state, $complete_form) { // set the default values for each field if (empty($element['#value'])) { $element['#value'] = array( 'items' => '', 'items_file' => '', 'file_path' => '', ); } $element['#tree'] = TRUE; // add items text area element $parents = $element['#parents']; $parents[] = 'items'; $element['items'] = array( '#type' => 'textarea', '#default_value' => $element['#value']['items'], ); // add file upload element $parents = $element['#parents']; $parents[] = 'items_file'; $element['items_file'] = array( '#type' => 'file', '#title' => 'File upload', '#default_value' => $element['#value']['items_file'], ); // add hidden elelment $parents = $element['#parents']; $parents[] = 'file_path'; $element['file_path'] = array( '#type' => 'hidden', '#default_value' => $element['#value']['file_path'], ); return $element; } /** * Form element description */ function expand_sequence_combo($element, $edit, $form_state, $complete_form) { // set the default values for each field if (empty($element['#value'])) { $element['#value'] = array( 'upstream' => '', 'downstream' => '', ); } $element['#tree'] = TRUE; // add the upstream box $parents = $element['#parents']; $parents[] = 'upstream'; $element['upstream'] = array( '#type' => 'textfield', '#title' => t('Get Upstream Bases'), '#description' => t('Specify the number of upstream bases to include in the sequnce'), '#default_value' => $element['#value']['upstream'], ); // add the downstream box $parents = $element['#parents']; $parents[] = 'downstream'; $element['downstream'] = array( '#type' => 'textfield', '#prefix' => '
', '#title' => t('Get Downstream Bases'), '#description' => t('Specify the number of downstream bases to include in the sequnce'), '#default_value' => $element['#value']['downstream'], ); return $element; } /** * Theme the file upload combo form element */ function theme_file_upload_combo($element) { return theme('form_element', $element, '
' . $element['#children'] . '
'); } /** * Theme the file sequence form element */ function theme_sequence_combo($element) { return theme('form_element', $element, '
' . $element['#children'] . '
'); } /** * Validate all content passed into the file upload combo form element */ function file_upload_combo_validate($element, &$form) { $file = file_save_upload($element['#name'], array()); if ($file) { $form['values'][$element['#name']]['file_path'] = $file->filepath; // we need to add our file path to the $_GET element as if it were // submitted along with the rest of the form $_GET[$element['#name']]['file_path'] = $file->filepath; } } /** * Validate all content passed into the sequence combo form element */ function sequence_combo_validate($element, &$form) { $upstream = $form['values'][$element['#name']]['upstream']; $downstream = $form['values'][$element['#name']]['downstream']; if ($upstream < 0) { form_set_error($element['#name'], 'Please provide a positive number for upstream bases'); } if ($upstream and !preg_match('/^\d+$/', $upstream)) { form_set_error($element['#name'], 'Please provide a decimal number for upstream bases'); } if ($downstream < 0) { form_set_error($element['#name'], 'Please provide a positive number for downstream bases'); } if ($downstream and !preg_match('/^\d+$/', $downstream)) { form_set_error($element['#name'], 'Please provide a decimal number for downstream bases'); } }