123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <?php
- /**
- * @file
- * Provides API functions specificially for managing contact records in Chado.
- *
- * @ingroup tripal_chado
- */
- /**
- * @defgroup tripal_contact_api Chado Contact
- * @ingroup tripal_chado_api
- * @{
- * Provides API functions for working with chado records in Chado that
- * go beyond the generic Chado API functions.
- * @}
- */
- /**
- * Adds a contact to the Chado contact table.
- *
- * @param $values
- * An array of values to be inserted. Valid keys include:
- * - name: The name of the contact.
- * - description: Text describing the contact.
- * - type_name: The type of contact. Must be a term in the tripal_contact
- * vocabulary.
- * - properties: An associative array containing a list of key value pairs for
- * the properites. The key's must be valid terms in the tripal_contact
- * vocabulary (e.g. Affiliation, Address, etc).
- *
- * @return
- * On success, an array is returned containing the fields of the contact
- * record including the newly added contact_id. On failure, FALSE is
- * returned.
- *
- * @ingroup tripal_contact_api
- */
- function chado_insert_contact($values) {
- $name = $values['name'];
- $description = $values['description'];
- $type = $values['type_name'];
- $properties = $values['properties'];
- // check to see if this contact name already exists.
- $values = array('name' => $name);
- $options = array('statement_name' => 'sel_contact_na');
- $contact = chado_select_record('contact', array('contact_id'), $values, $options);
- if (count($contact) == 0) {
- $cvterm = chado_get_cvterm(array(
- 'name' => $type,
- 'cv_id' => array('name' => 'tripal_contact')
- ));
- if (!$cvterm) {
- tripal_report_error('tripal_contact', TRIPAL_ERROR, "Cannot find contact type '%type'",
- array('%type' => $type));
- return FALSE;
- }
- $values = array(
- 'name' => $name,
- 'description' => '',
- 'type_id' => $cvterm->cvterm_id,
- );
- $options = array('statement_name' => 'ins_contact_nadety');
- $contact = chado_insert_record('contact', $values, $options);
- if (!$contact) {
- tripal_report_error('tripal_contact', TRIPAL_ERROR, 'Could not add the contact', array());
- return FALSE;
- }
- }
- else {
- $contact = (array) $contact[0];
- }
- // add the description property. We don't store this in the contact.description
- // field because it is only 255 characters long and may not be enough
- if ($description) {
- chado_insert_property(
- array(
- 'table' => 'contact',
- 'id' => $contact['contact_id'],
- ),
- array(
- 'type_name' => 'contact_description',
- 'cv_name' => 'tripal_contact',
- 'value' => $description,
- ),
- array(
- 'update_if_present' => TRUE,
- )
- );
- }
- // add in the other properties provided
- foreach ($properties as $key => $value) {
- $success = chado_insert_property(
- array('table' => 'contact', 'id' => $contact['contact_id']),
- array(
- 'type_name' => $key,
- 'cv_name' => 'tripal_contact',
- 'value' => $value,
- ),
- array('update_if_present' => TRUE)
- );
- if (!$success) {
- tripal_report_error('tripal_contact', TRIPAL_ERROR,
- "Could not add the contact property '%prop'", array('%prop' => $key));
- return FALSE;
- }
- }
- return $contact;
- }
- /**
- * This function is intended to be used in autocomplete forms for contacts.
- *
- * @param $text
- * The string to search for.
- *
- * @return
- * A json array of terms that begin with the provided string.
- *
- * @ingroup tripal_contact_api
- */
- function chado_autocomplete_contact($text) {
- $matches = array();
- $sql = "SELECT * FROM {contact} WHERE lower(name) like lower(:name) ";
- $args = array();
- $args[':name'] = $text . '%';
- $sql .= "ORDER BY name ";
- $sql .= "LIMIT 25 OFFSET 0 ";
- $results = chado_query($sql, $args);
- $items = array();
- foreach ($results as $contact) {
- // Don't include the null contact
- if ($contact->name == 'null') {
- continue;
- }
- $items[$contact->name] = $contact->name;
- }
- drupal_json_output($items);
- }
|