$node->feature->feature_id);
$options = array('order_by' => array('type_id' => 'ASC','rank'=>'ASC'));
$properties = tripal_core_generate_chado_var('featureprop',$values,$options);
$properties = tripal_core_expand_chado_vars($properties,'field','featureprop.value');
$expand_add = (sizeof($properties)) ? FALSE : TRUE;
// add the appopriate form sections
$output .= drupal_get_form('tripal_feature_add_ONE_property_form', $node, $expand_add);
$output .= drupal_get_form('tripal_feature_edit_ALL_properties_form', $node, $properties);
$output .= drupal_get_form('tripal_feature_implement_back_to_feature_button', $node->nid);
return $output;
}
/**
*
*
* @ingroup tripal_feature
*/
function tripal_feature_add_ONE_property_form($form_state, $node, $expand) {
$form = array();
$feature_id = $node->feature->feature_id;
$form['add_properties'] = array(
'#type' => 'fieldset',
'#title' => t('Add Property'),
'#collapsible' => TRUE,
'#collapsed' => ($expand) ? FALSE : TRUE,
);
$form['prop_nid'] = array(
'#type' => 'hidden',
'#value' => $node->nid
);
$form['add_properties']['feature_id'] = array(
'#type' => 'value',
'#value' => $feature_id,
'#required' => TRUE
);
// right now this defaults to the 'feature_property' CV
// but in the future it should be more flexible
$form['cv_name'] = array(
'#type' => 'hidden',
'#value' => 'feature_property'
);
// get the list of property types
$prop_type_options = array();
$columns = array('cvterm_id','name');
$values = array(
'cv_id' => array(
'name' => $form['cv_name']['#value'],
)
);
$results = tripal_core_chado_select('cvterm',$columns,$values);
foreach ($results as $r) {
$prop_type_options[$r->name] = $r->name;
}
$form['add_properties']['property'] = array(
'#type' => 'select',
'#title' => t('Type of Property'),
'#options' => $prop_type_options,
);
$form['add_properties']['prop_value'] = array(
'#type' => 'textfield',
'#title' => t('Value'),
);
$form['add_properties']['submit-add'] = array(
'#type' => 'submit',
'#value' => t('Add Property')
);
return $form;
}
/**
*
*
* @ingroup tripal_feature
*/
function tripal_feature_add_ONE_property_form_validate($form, &$form_state) {
// Only Require if Adding Property
if ($form_state['clicked_button']['#value'] == t('Add Property') ) {
// Check that there is a feature
if ( $form_state['values']['feature_id'] <= 0 ) {
form_set_error('feature_id', 'There is no associated feature.');
}
// Check that Selected a type
if ( !$form_state['values']['property']) {
form_set_error('property', 'Please select a type of property.');
}
}
}
/**
*
*
* @ingroup tripal_feature
*/
function tripal_feature_add_ONE_property_form_submit($form, &$form_state) {
$feature_id = $form_state['values']['feature_id'];
$property = $form_state['values']['property'];
$value = $form_state['values']['prop_value'];
$cv_name = $form_state['values']['cv_name'];
$succes = tripal_feature_insert_property($feature_id,$property,$value,0,$cv_name);
if($succes){
drupal_set_message("Successfully Added Property: $property => $value");
} else {
drupal_set_message("Failed to Add Property: $property => $value");
}
}
/**
* Implements Hook_form()
* Handles adding of Properties for features
*
* @ingroup tripal_feature
*/
function tripal_feature_edit_ALL_properties_form($form_state, $node, $properties) {
$form = array();
$feature_id = $node->feature->feature_id;
$form['nid'] = array(
'#type' => 'hidden',
'#value' => $node->nid
);
$form['add_properties']['feature_id'] = array(
'#type' => 'value',
'#value' => $feature_id,
'#required' => TRUE
);
// right now this defaults to the 'feature_property' CV
// but in the future it should be more flexible
$form['cv_name'] = array(
'#type' => 'hidden',
'#value' => 'feature_property'
);
if (sizeof($properties)) {
// build the select box options for the property name
$prop_type_options = array();
$columns = array('cvterm_id','name');
$values = array(
'cv_id' => array(
'name' => $form['cv_name']['#value']
)
);
$results = tripal_core_chado_select('cvterm',$columns, $values);
foreach ($results as $r) {
$prop_type_options[$r->name] = $r->name;
}
// iterate through all of the properties and create a set of form elements
foreach ($properties as $i => $property) {
$form["num-$i"] = array(
'#type' => 'fieldset',
'#value' => "Property $i"
);
$form["num-$i"]["id-$i"] = array(
'#type' => 'hidden',
'#value' => $property->featureprop_id
);
$default = array_search($property->type, $prop_type_options);
$form["num-$i"]["type-$i"] = array(
'#type' => 'select',
'#options' => $prop_type_options,
'#default_value' => $property->type_id->name
);
$form["num-$i"]["value-$i"] = array(
'#type' => 'textfield',
'#default_value' => $property->value
);
$form["num-$i"]["delete-$i"] = array(
'#type' => 'submit',
'#value' => t("Delete"),
'#name' => "delete-$i",
);
} //end of foreach property
$form['num_properties'] = array(
'#type' => 'hidden',
'#value' => $i
);
$form["submit-edits"] = array(
'#type' => 'submit',
'#value' => t('Update All Properties')
);
}
return $form;
}
/**
*
*
* @ingroup tripal_feature
*/
function tripal_feature_edit_ALL_properties_form_submit($form, &$form_state) {
$cv_name = $form_state['values']['cv_name'];
$feature_id = $form_state['values']["feature_id"];
$all_good = 1;
// if the update button was clicked then do the update
if ($form_state['clicked_button']['#value'] == t('Update All Properties') ) {
// iterate through each of the properties and set each one
for ($i=1; $i<=$form_state['values']['num_properties']; $i++) {
$featureprop_id = $form_state['values']["id-$i"];
$property = $form_state['values']["type-$i"];
$value = $form_state['values']["value-$i"];
$success = tripal_feature_update_property_by_id($featureprop_id,$property,$value,$cv_name);
if(!$success){
drupal_set_message("Failed to Update Property: $property => $value");
$all_good = 0;
}
}
if($all_good){
drupal_set_message("Updated all Properties");
}
drupal_goto('node/'.$form_state['values']['nid']);
}
// if the delete button was clicked then remove the property
elseif (preg_match('/delete-(\d+)/', $form_state['clicked_button']['#name'], $matches) ) {
$i = $matches[1];
$featureprop_id = $form_state['values']["id-$i"];
$property = $form_state['values']["type-$i"];
$value = $form_state['values']["value-$i"];
$success = tripal_feature_delete_property_by_id($featureprop_id);
if($success){
drupal_set_message("Deleted Property");
} else {
drupal_set_message("Unable to Delete Property");
}
} else {
drupal_set_message("Unrecognized Button Pressed",'error');
}
}
/**
*
*
* @ingroup tripal_feature
*/
function theme_tripal_feature_edit_ALL_properties_form ($form) {
$output = '';
$output .= '
Type | Value |
---|---|
'.$p->type.' | '.$p->value.' |