123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403 |
- <?php
- /*************************************************************************
- *
- */
- function tripal_core_bulk_loader_create (){
-
- return drupal_get_form('tripal_core_bulk_loader_create_form');
- }
- /*************************************************************************
- *
- */
- function tripal_core_bulk_loader_create_form (&$form_state = NULL){
- $form = array();
- // get the step used by this multistep form
- $step = 1;
- if(isset($form_state['storage'])){
- $step = (int)$form_state['storage']['step'];
- }
- $form = array();
- if($step == 1){
- tripal_core_bulk_loader_create_form_step1 ($form,$form_state);
- $form_state['storage']['step'] = $step + 1;
- }
- if($step == 2){
- tripal_core_bulk_loader_create_form_step2 ($form,$form_state);
- }
- return $form;
- }
- /*************************************************************************
- *
- */
- function tripal_core_bulk_loader_create_form_validate ($form,&$form_state) {
- }
- /*************************************************************************
- *
- */
- function tripal_core_bulk_loader_create_form_submit ($form,&$form_state) {
- if($form_State['storage']['step'] < 4){
- return;
- }
- }
- /*************************************************************************
- *
- */
- function tripal_core_bulk_loader_create_form_step2 (&$form,$form_state){
- if(isset($form_state['values']['columns'])){
- $form_state['storage']['columns'] = $form_state['values']['columns'];
- }
- $form['bulk_loader'] = array(
- '#type' => 'fieldset',
- '#title' => t('Step 2: Define the columns of the file'),
- );
- $columns = $form_state['storage']['columns'];
- // $form['debug']= array(
- // '#value' => "Columns: $columns",
- // '#weight' => -1
- // );
- $fields = array();
- $fields[''] = '';
- // these fields correspond with the columns of the feature table and
- // the foreign key contraints for the feature table.
- $fields = array(
- '' => '',
- 'ignore' => 'Ignore this column',
- 'Feature details' => array (
- 'name' => 'Feature Name (human readable)',
- 'uniquename' => 'Unique Feature Name',
- 'type' => 'Feature type (must be a valid SO term)',
- 'alt_type' => 'Additional ontology term',
- 'residues' => 'Residues',
- ),
- 'Organism specification' => array (
- 'organism_id' => 'Organism ID number',
- 'genus' => 'Genus',
- 'species' => 'Species',
- 'full_name' => 'Scientific Name (genus + species)',
- 'common_name' => 'Common Name',
- ),
- 'External Database Cross-Reference' => array(
- 'db_id' => 'Database ID number',
- 'db_name' => 'Database name (must exists in the database)',
- 'accession' => 'Accession',
- ),
- 'Feature Relationship' => array (
- 'rel_type' => 'Relationship Type (must be a valid relationship term)',
- 'parent' => 'Parent unique name',
- 'parent type' => 'Parent Type (must be a valid SO term)',
- ),
- 'Feature Location' => array (
- 'srcfeature' => 'Reference feature (must already exist in the database)',
- 'srcfeature_type' => 'Reference feature type (must be a valid SO term)',
- 'fmin' => 'Start position',
- 'fmax' => 'Stop position',
- 'strand' => 'Strand (valid values: 0,-1,+1)',
- 'phase' => 'Phase (valid values: (+,-,.)',
- ),
- 'Feature Property' => array (
- 'property' => 'Feature property value',
- ),
- 'Feature Synonym' => array (
- 'syn_name' => 'Synonym name',
- ),
- 'Library specification' => array (
- 'library_id' => 'Library ID number',
- 'library_name' => 'Library name',
- ),
- 'Analysis specification' => array (
- 'analysis_id' => 'Analysis ID number',
- 'analysis_source' => 'Analysis identifying name (sourcename column in Chado)',
- 'analysis_desc' => 'Analysis description',
- 'analysis_program' => 'Analysis program',
- 'analysis_program_version' => 'Analysis program version'
- ),
- );
- // organism foreign key identifies. These are used to find the organism
- // for which the feature belongs.
- $form['columns'] = array(
- '#type' => 'hidden',
- '#value' => $columns,
- );
- // get the list of organisms
- $sql = "SELECT * FROM {organism} ORDER BY genus, species";
- $previous_db = tripal_db_set_active('chado'); // use chado database
- $org_rset = db_query($sql);
- tripal_db_set_active($previous_db); // now use drupal database
- $organisms = array();
- $genus = array();
- $species = array();
- $common_names = array();
- $genera[''] = '';
- $species[''] = '';
- $common_names[''] = '';
- $full_names[''] = '';
- while($organism = db_fetch_object($org_rset)){
- $full_names["$organism->genus $organism->species"] = "$organism->genus $organism->species";
- $genera[$organism->genus] = "$organism->genus";
- $species[$organism->species] = "$organism->species";
- $common_names[$organism->common_name] = "$organism->common_name";
- }
- for($i = 1; $i <= $columns; $i++){
- $form['bulk_loader']["col_$i"] = array(
- '#type' => 'fieldset',
- '#title' => t("Column $i of the input file"),
- );
- $form['bulk_loader']["col_$i"]["col_type_$i"] = array(
- '#title' => t('Field Selection'),
- '#type' => 'select',
- '#options' => $fields,
- '#weight' => 0,
- // this field will use AJAX to populate and information needed
- // for specific types, such as for feature properties. It
- // calls the step2_get_type URL and passes the column ($i).
- // the return value is additional form items or text
- '#ahah' => array(
- 'event' => 'change',
- 'wrapper' => "type_cols_$i",
- 'path' => "/admin/tripal/bulk_load/step2_get_type/$i",
- 'effect' => 'fade',
- 'method' => 'replace'
- ),
- );
- // these next fields are hidden (access = false) and will be shown
- // if the user selects the feature property type in the drop down
- // above.
- //-------------------------------------------------------------------------
- // default text box for allowed values
- $form['bulk_loader']["col_$i"]["col_prop_valid_$i"] = array(
- '#title' => t('Allowed Values'),
- '#type' => 'textarea',
- '#weight' => 0,
- '#description' => 'Please provide a list of allowed values for this field. Separate these values with a space. Leave blank to allow any value',
- '#access' => FALSE
- );
- //-------------------------------------------------------------------------
- // Organism allowed values
- $form['bulk_loader']["col_$i"]["col_prop_genera_$i"] = array (
- '#title' => t('Allowed Values'),
- '#type' => t('select'),
- '#description' => t("Choose all allowed genera values for this column (ctrl+click to select multiple values). Select none to allow all"),
- '#required' => FALSE,
- '#options' => $genera,
- '#weight' => 2,
- '#multiple' => TRUE,
- '#size' => 10,
- '#access' => FALSE
- );
- $form['bulk_loader']["col_$i"]["col_prop_species_$i"] = array (
- '#title' => t('Allowed Values'),
- '#type' => t('select'),
- '#description' => t("Choose all allowed species values for this column (ctrl+click to select multiple values). Select none to allow all"),
- '#required' => FALSE,
- '#options' => $species,
- '#weight' => 2,
- '#multiple' => TRUE,
- '#size' => 10,
- '#access' => FALSE
- );
- $form['bulk_loader']["col_$i"]["col_prop_common_name_$i"] = array (
- '#title' => t('Allowed Values'),
- '#type' => t('select'),
- '#description' => t("Choose all allowed values for this column (ctrl+click to select multiple values). Select none to allow all"),
- '#required' => FALSE,
- '#options' => $common_names,
- '#weight' => 2,
- '#multiple' => TRUE,
- '#size' => 10,
- '#access' => FALSE
- );
- $form['bulk_loader']["col_$i"]["col_prop_full_name_$i"] = array (
- '#title' => t('Allowed Values'),
- '#type' => t('select'),
- '#description' => t("Choose all allowed values for this column (shift+click to select multiple values). Select none to allow all"),
- '#required' => FALSE,
- '#options' => $full_names,
- '#weight' => 2,
- '#multiple' => TRUE,
- '#size' => 10,
- '#access' => FALSE
- );
- //-------------------------------------------------------------------------
- // feature property fields
- $form['bulk_loader']["col_$i"]["col_prop_name_$i"] = array(
- '#title' => t('Property Name'),
- '#type' => 'textfield',
- '#weight' => 1,
- '#description' => 'Please provide a name for this property. It should be a single
- word with only alphanumeric characters and underscores. If this
- name exists as a CV term in Chado already it will be reused, otherwise
- a new CV term with this name will be added.',
- '#required' => TRUE,
- '#access' => FALSE
- );
- $form['bulk_loader']["col_$i"]["col_prop_full_name_$i"] = array(
- '#title' => t('Property Full Name'),
- '#type' => 'textfield',
- '#weight' => 3,
- '#description' => 'Please provide a human readable name for this property. This will be used when
- displaying the property title',
- '#access' => FALSE
- );
- $form['bulk_loader']["col_$i"]["col_prop_desc_$i"] = array(
- '#title' => t('Property Description'),
- '#type' => 'textarea',
- '#weight' => 4,
- '#description' => 'Please provide a description of this property.',
- '#access' => FALSE
- );
- // this is an empty div box that gets put on the form. This is the
- // box where the hidden form elements will be rendered when the
- // AJAX call returns
- $form['bulk_loader']["col_$i"]["type_wrap_$i"] = array(
- '#prefix' => "<div class=\"clear-block\" id=\"type_cols_$i\">",
- '#value' => ' ',
- '#suffix' => '</div>',
- );
- }
-
- $form['submit'] = array (
- '#type' => 'submit',
- '#value' => t('Next'),
- '#weight' => 5,
- '#executes_submit_callback' => TRUE,
- );
- }
- /*************************************************************************
- *
- */
- function tripal_core_bulk_loader_ahah_step2_feature_type($column){
- // create a form_state array to hold the form variables
- $form_state = array('storage' => NULL, 'submitted' => FALSE);
- $form_state['storage']['step'] = 2;
-
- // retreive the form from the cache
- $form_build_id = $_POST['form_build_id'];
- $form = form_get_cache($form_build_id, $form_state);
- // get the form name
- $args = $form['#parameters'];
- $form_id = array_shift($args);
- // add the post variables to the form and set a few other items
- $form['#post'] = $_POST;
- $form['#redirect'] = FALSE;
- $form['#programmed'] = FALSE;
- $form_state['post'] = $_POST;
- drupal_process_form($form_id, $form, $form_state);
- $form = drupal_rebuild_form($form_id, $form_state, $args, $form_build_id);
- // get the column
- $i = $column;
- // check to see what type of field has been selected and provide the
- // additional fields as appropriate
- $type = $form_state["post"]["col_type_$i"];
- if(strcmp($type,'genus')==0){
- $propform['bulk_loader']["col_$i"]["col_prop_genera_$i"] = $form['bulk_loader']["col_$i"]["col_prop_genera_$i"];
- $propform['bulk_loader']["col_$i"]["col_prop_genera_$i"]['#access'] = TRUE;
- }
- elseif(strcmp($type,'species')==0){
- $propform['bulk_loader']["col_$i"]["col_prop_species_$i"] = $form['bulk_loader']["col_$i"]["col_prop_species_$i"];
- $propform['bulk_loader']["col_$i"]["col_prop_species_$i"]['#access'] = TRUE;
- }
- elseif(strcmp($type,'common_name')==0){
- $propform['bulk_loader']["col_$i"]["col_prop_common_name_$i"] = $form['bulk_loader']["col_$i"]["col_prop_common_name_$i"];
- $propform['bulk_loader']["col_$i"]["col_prop_common_name_$i"]['#access'] = TRUE;
- }
- elseif(strcmp($type,'full_name')==0){
- $propform['bulk_loader']["col_$i"]["col_prop_full_name_$i"] = $form['bulk_loader']["col_$i"]["col_prop_full_name_$i"];
- $propform['bulk_loader']["col_$i"]["col_prop_full_name_$i"]['#access'] = TRUE;
- }
- elseif(strcmp($type,'property')==0){
- // we just want to render the property fields that were previously not visible
- $propform['bulk_loader']["col_$i"]["col_prop_name_$i"] = $form['bulk_loader']["col_$i"]["col_prop_name_$i"];
- $propform['bulk_loader']["col_$i"]["col_prop_full_name_$i"] = $form['bulk_loader']["col_$i"]["col_prop_full_name_$i"];
- $propform['bulk_loader']["col_$i"]["col_prop_desc_$i"] = $form['bulk_loader']["col_$i"]["col_prop_desc_$i"];
- $propform['bulk_loader']["col_$i"]["col_prop_name_$i"]['#access'] = TRUE;
- $propform['bulk_loader']["col_$i"]["col_prop_full_name_$i"]['#access'] = TRUE;
- $propform['bulk_loader']["col_$i"]["col_prop_desc_$i"]['#access'] = TRUE;
- }
- else {
- // use a default valid values textbox if we have no special needs for the type
- $propform['bulk_loader']["col_$i"]["col_prop_valid_$i"] = $form['bulk_loader']["col_$i"]["col_prop_valid_$i"];
- $propform['bulk_loader']["col_$i"]["col_prop_valid_$i"]['#access'] = TRUE;
- }
- $output = theme('status_messages') . drupal_render($propform);
- // Final rendering callback.
- drupal_json(array('status' => TRUE, 'data' => $output));
- }
- /*************************************************************************
- *
- */
- function tripal_core_bulk_loader_create_form_step1 (&$form,$form_state){
- $modules = array();
- $modules['feature'] = 'Feature';
- $modules['organism'] = 'Organism';
- $modules['library'] = 'Library';
- $modules['analysis'] = 'Analysis';
- // set the fieldset title to indicate the step
- $form['bulk_loader'] = array(
- '#type' => 'fieldset',
- '#title' => t('Step 1: Select the Chado module'),
- );
- $form['bulk_loader']['chado_module'] = array(
- '#title' => t('Chado Module'),
- '#description' => t('Please select the module for which you would like to create an importer'),
- '#type' => 'select',
- '#options' => $modules,
- '#weight' => 0,
- '#required' => TRUE
- );
- $form['bulk_loader']['columns']= array(
- '#type' => 'textfield',
- '#title' => t('Number of Columns'),
- '#description' => t('Please specify the number of columns in the input file.'),
- '#weight' => 2,
- '#required' => TRUE
- );
- $form['submit'] = array (
- '#type' => 'submit',
- '#value' => t('Next'),
- '#weight' => 5,
- '#executes_submit_callback' => TRUE,
- );
- }
|