|
@@ -9,16 +9,30 @@
|
|
|
|
|
|
function chado_example_form($form, $form_state) {
|
|
|
|
|
|
- // When setting the defaults for your form make sure to take into account
|
|
|
- // that when ajax is fired via a button (which it is for the properties api)
|
|
|
- // you're user entered data is in $form_state['input'] instead of $form_state['values']
|
|
|
- // although it has not been validated. Thus make sure you handle values in $form_state['input']
|
|
|
- // or user input may be loast on addition of properties
|
|
|
-
|
|
|
- // All the form array definition particular to your node type
|
|
|
-
|
|
|
- // Add the properties form to your current form
|
|
|
- // get the chado_example properties to be used in the dropdown
|
|
|
+ // Default values for form elements can come in the following ways:
|
|
|
+ //
|
|
|
+ // 1) as elements of the $node object. This occurs when editing an existing node
|
|
|
+ // 2) in the $form_state['values'] array which occurs on a failed validation or
|
|
|
+ // ajax callbacks when the ajax call originates from non-submit fields other
|
|
|
+ // than button
|
|
|
+ // 3) in the $form_state['input'] array which occurs on ajax callbacks from submit
|
|
|
+ // form elements (e.g. buttons) and the form is being rebuilt but has not yet
|
|
|
+ // been validated
|
|
|
+ //
|
|
|
+ // The properties elements added by this function do use AJAX calls from buttons,
|
|
|
+ // therefore, it is important to check for form values in the $form_state['values']
|
|
|
+ // for case #2 above, and in the $form_state['input'] for case #3.
|
|
|
+ // See the chado analysis node form for an example.
|
|
|
+
|
|
|
+
|
|
|
+ // Next, add in all the form array definition particular to your node type
|
|
|
+
|
|
|
+ // To add in the properties form elements, you first need to prepare the arguments
|
|
|
+ // for the function call. One inportant argument is a list of properties that
|
|
|
+ // will be made avaialble for the user to select from. You should query the
|
|
|
+ // database to retrieve the applicable terms from the cvterm table and store them in an array
|
|
|
+ // of where the cvterm.cvterm_id field is the key and the cvterm.name is the value.
|
|
|
+ // these terms should all be from the same vocabulary.
|
|
|
$properties = array();
|
|
|
$properties[] = 'Select a Property';
|
|
|
$sql = "
|
|
@@ -30,17 +44,38 @@
|
|
|
NOT CVT.is_obsolete = 1
|
|
|
ORDER BY CVT.name ASC
|
|
|
";
|
|
|
- $ontology_name = 'nameofproptypeontology'; //you need to set this variable with the cv.name of the ontology governing your prop tables type_id
|
|
|
+
|
|
|
+ $ontology_name = 'name_of_proptype_ontology'; //you need to set this variable with the cv.name of the ontology governing your prop tables type_id
|
|
|
$prop_types = chado_query($sql, array(':ontology_name' => $ontology_name));
|
|
|
while ($prop = $prop_types->fetchObject()) {
|
|
|
$properties[$prop->cvterm_id] = $prop->name;
|
|
|
}
|
|
|
|
|
|
- $exclude = array();
|
|
|
+ // the properties form will add a select dropdown of terms containing the items in the $properties array
|
|
|
+ // constructed above, but it will also pre-populate rows of properties that already are associated
|
|
|
+ // with the object. If you would like to pre-populated properties regardless if they exist in the database
|
|
|
+ // or not, you can create an $include array which has the following format:
|
|
|
+ // array(
|
|
|
+ // array('cvterm' => $obj1, 'value' => $val1),
|
|
|
+ // array('cvterm' => $obj2, 'value' => $val2),
|
|
|
+ // ... etc
|
|
|
+ // );
|
|
|
+ // The 'cvterm' key should have as a value an object with these properties: 'name', 'cvterm_id', 'definition'.
|
|
|
$include = array();
|
|
|
+
|
|
|
+ // sometimes a property exists in the database and is properly associated with the object, but we do
|
|
|
+ // not want it to appear in the list of properties that are pre-populated. It may be handled in some
|
|
|
+ // other way. For example, for contacts, the description field is stored as a property because
|
|
|
+ // the actual contact.description field is only 255 characters. The 'contact_description' property should
|
|
|
+ // not be shown in the list of properties, even if present, because it is handled by
|
|
|
+ // a different form element. This array holds the value of the cvterm.name column of the cvterms
|
|
|
+ // to exclude
|
|
|
+ $exclude = array();
|
|
|
+
|
|
|
+ // the instructions argument provides additional instructions to the user beyond the default instructions.
|
|
|
$instructions = t('To add additional properties to the drop down. ' . l("Add terms to the $ontology_name vocabulary", "admin/tripal/chado/tripal_cv/cvterm/add") . ".");
|
|
|
|
|
|
- // actually create and add the form
|
|
|
+ // Finally, and add the properties form elements to the form
|
|
|
tripal_core_properties_form(
|
|
|
$form, $form_state, // form and form_state of the current form
|
|
|
'exampleprop', // properties table name
|
|
@@ -57,7 +92,7 @@
|
|
|
return $form;
|
|
|
}
|
|
|
|
|
|
- function nodetype_insert($node) {
|
|
|
+ function chado_example_insert($node) {
|
|
|
|
|
|
// if there is an example_id in the $node object then this must be a sync so
|
|
|
// we can skip adding the chado_example as it is already there, although
|
|
@@ -68,7 +103,14 @@
|
|
|
|
|
|
// Add to any other tables needed
|
|
|
|
|
|
- // Add each property (exampleprop table)
|
|
|
+ // Add each property (exampleprop table). The tripal_core_properties_form_retrieve()
|
|
|
+ // function retrieves all of the properties and returns them in an array of the format:
|
|
|
+ //
|
|
|
+ // $properties[<property name>][<rank>] = <value
|
|
|
+ //
|
|
|
+ // This array can then be used for inserting or updating properties using the API call
|
|
|
+ // tripal_hook_insert_property()
|
|
|
+ //
|
|
|
// example_property = controlled vocab name for exampleprop.type_id
|
|
|
$properties = tripal_core_properties_form_retreive($node, 'example_property');
|
|
|
foreach ($properties as $property => $elements) {
|
|
@@ -98,7 +140,7 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- function nodetype_update($node) {
|
|
|
+ function chado_example_update($node) {
|
|
|
|
|
|
|
|
|
// Update record in chado example table
|