| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491 | <?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[''] = '';/*   $form_fields = array(      'Feature details' => array (                   'name' => array(            'description' => 'Feature Name (human readable)',            'table' => array(               'table name' => 'feature',               'fields' => array('name'),            ),         ),                        'uniquename' => array(            'description' => 'Unique Name (must be unique for this organism and feature type)',            'table' => array(               'table name' => 'feature',               'fields' => array('uniquename'),            ),         ),          'type_id' => array(            'description' => 'Feature type (must be a valid SO term',            'table' => array(               'table name' => 'feature',               'fields' => array('uniquename'),            ),         ),          'residues' => array(            'description' => 'Residues',            'table' => array(               'table name' => 'feature',               'fields' => array('residues'),            ),         ),       ),           'Organism specification' => array (                    'organism_id' => array(            'description' => 'Organism ID number',            'table' => array(               'table name' => 'organism',               'fields' => array('organism_id'),            ),         ),          'genus' => array(            'description' => 'Genus',            'table' => array(               'table name' => 'organism',               'fields' => array('genus'),            ),            'valid values' => 'this'         ),          'species' => array(            'description' => 'Species',            'table' => array(               'table name' => 'organism',               'fields' => array('species'),            ),         ),          'full_name' => array(            'description' => 'Scientific Name (genus + species)',            'table' => array(               'table name' => 'organism',               'fields' => array('genus','species'),               'parser' => '/^(.*?)\s+(.*?)$/',            ),         ),          'common_name' => array(            'description' => 'Common Name',            'table' => array(               'table name' => 'organism',               'fields' => array('common_name'),            ),         ),       ),1.  allow the user to specify the term from a specific vocabulary2.  allow the user to specify the vocabulary to choose from3.        'Feature Property' => array (         'property' => array(            'description' => 'Feature property value',            'table' => array(               'table name' => 'featureprop',               'fields' => array('value'),               'check' => array(                  'type_id' => {                ),            ).         ),       ),   );*/   // 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,   );   }
 |