'item',
'#prefix' => '
',
'#markup' => t(
'You have not configured the module yet. Please visit the
settings page and submit the form before continuing.'
),
'#suffix' => '
',
];
return;
}
$organisms = tripal_jbrowse_mgmt_get_organisms_list();
$mapped_organisms = [];
foreach ($organisms as $organism) {
$mapped_organisms[$organism->organism_id] = tripal_jbrowse_mgmt_construct_organism_name(
$organism
);
}
$form['description_of_form'] = [
'#type' => 'item',
'#markup' => t(
'Create a new JBrowse instance for a given organism. Submitting this form
creates all the necessary files for a new JBrowse instance.'
),
];
$form['organism'] = [
'#title' => t('Organism'),
'#description' => t('Select the organism'),
'#type' => 'select',
'#options' => $mapped_organisms,
'#required' => TRUE,
];
$form['description'] = [
'#title' => t('Description'),
'#description' => t('Optional description for the instance.'),
'#type' => 'textarea',
];
$form['data'] = [
'#type' => 'fieldset',
'#title' => t('Reference Sequence File'),
'#collabsible' => FALSE,
];
$form['data']['data_desc'] = [
'#type' => 'item',
'#markup' => t(
'You may either upload a file below or provide
the path to the reference sequence fasta file.'
),
];
$form['data']['ref_seq_file'] = [
'#type' => 'file',
'#title' => t('Reference Sequence FASTA File'),
];
$form['data']['ref_seq_path'] = [
'#type' => 'textfield',
'#title' => t('OR Path to File on Server'),
'#description' => t(
'This path will be ignored if a file is provided above. Ex: sites/default/files/file.fasta or /data/file.fasta'
),
];
$form['submit'] = [
'#type' => 'submit',
'#value' => 'Create New Instance',
];
return $form;
}
/**
* Validate the form.
*
* @param $form
* @param $form_state
*/
function tripal_jbrowse_mgmt_add_form_validate($form, &$form_state) {
$values = $form_state['values'];
$organism = isset($values['organism']) ? $values['organism'] : NULL;
$file = $_FILES['files']['tmp_name']['ref_seq_file'];
$local_file = isset($values['ref_seq_path']) ? $values['ref_seq_path'] : NULL;
if (empty($file) && empty($local_file)) {
form_set_error(
'ref_seq_file',
'Please provide a local file path or upload a new file.'
);
}
elseif (empty($file) && !empty($local_file)) {
if (!file_exists($local_file)) {
form_set_error('ref_seq_path', 'The file path provided does not exist.');
}
}
else {
$uploaded = tripal_jbrowse_mgmt_upload_file('ref_seq_file');
if (!$uploaded) {
form_set_error('ref_seq_file', 'Unable to upload file');
}
else {
$uploaded = tripal_jbrowse_mgmt_move_file($uploaded);
$form_state['values']['uploaded_file'] = $uploaded;
}
}
$instances = tripal_jbrowse_mgmt_get_instances(['organism_id' => $organism]);
if (!empty($instances)) {
form_set_error(
'organism',
'A JBrowse instance for the selected organism already exists. You can edit the instance from the instances page.'
);
}
$organism = db_select('chado.organism', 'CO')
->fields('CO')
->condition('organism_id', $organism)
->execute()
->fetchObject();
if (empty($organism)) {
form_set_error('organism', 'Invalid organism selected ' . $organism);
}
}
/**
* @param $form
* @param $form_state
*
* @throws \Exception
*/
function tripal_jbrowse_mgmt_add_form_submit($form, &$form_state) {
global $user;
$values = $form_state['values'];
$organism_id = $values['organism'];
$description = isset($values['description']) ? $values['description'] : '';
if (empty($values['uploaded_file'])) {
$file = $values['ref_seq_path'];
}
else {
$file = $values['uploaded_file'];
}
$organism = db_select('chado.organism', 'CO')
->fields('CO')
->condition('organism_id', $organism_id)
->execute()
->fetchObject();
$instance_id = tripal_jbrowse_mgmt_create_instance(
[
'organism_id' => $organism_id,
'title' => tripal_jbrowse_mgmt_construct_organism_name($organism),
'description' => $description,
'created_at' => time(),
'file' => $file,
]
);
if ($instance_id) {
drupal_set_message('Instance created successfully!');
$name = 'Create JBrowse instance for ';
$name .= tripal_jbrowse_mgmt_construct_organism_name($organism);
tripal_add_job(
$name,
'tripal_jbrowse_mgmt',
'tripal_jbrowse_mgmt_create_instance_files',
[$instance_id],
$user->uid
);
drupal_goto("admin/tripal_jbrowse_mgmt/instances/$instance_id");
return $form;
}
drupal_set_message('Failed to create instance!');
}