123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- <?php
- /**
- * @file
- * Provides an application programming interface (API) to manage entities
- * that use Chado as their base data.
- */
- /**
- * @defgroup tripal_chado_entity_api Chado Entity
- * @ingroup tripal_chado_api
- * @{
- * Provides an application programming interface (API) to manage entities
- * that use Chado as their base data.
- * @}
- */
- /**
- * Retreive the entity_id assigned to a given record_id and bundle.
- *
- * @param $bundle
- * A bundle object (as retrieved from tripal_load_bundle_entity().
- * @param $record_id
- * The ID of the record in the Chado table. The record must belong to
- * the table to which the bundle is associated in chado.
- *
- * @return
- * The ID of the entity that belongs to the given record_id.
- *
- * @ingroup tripal_chado_entity_api
- */
- function chado_get_record_entity_by_bundle(TripalBundle $bundle, $record_id) {
- if (!$bundle) {
- throw new Exception('Please provide a TripalBundle object.');
- };
- if (!$record_id) {
- throw new Exception('Please provide an integer record ID.');
- };
- if (!is_numeric($record_id)) {
- throw new Exception('Please provide an integer record ID. The value provided was "' . $record_id . '"');
- }
- $chado_entity_table = chado_get_bundle_entity_table($bundle);
- return db_select($chado_entity_table, 'CE')
- ->fields('CE', array('entity_id'))
- ->condition('CE.record_id', $record_id)
- ->execute()
- ->fetchField();
- }
- /**
- * Retreive the entity_id assigned to a given record_id and base table.
- *
- * @param $data_table
- * The name of the Chado base table.
- * @param $record_id
- * The ID of the record in the Chado table. The record must belong to
- * the table to which the bundle is associated in chado.
- *
- * @return
- * The ID of the entity that belongs to the given record_id, or NULL
- * otherwise.
- *
- * @ingroup tripal_chado_entity_api
- */
- function chado_get_record_entity_by_table($data_table, $record_id) {
- // The data table and type_id are required.
- if (!$data_table) {
- throw new Exception('Please provide the $data_table argument.');
- };
- if (!$record_id) {
- throw new Exception('Please provide an integer record ID.');
- };
- if (!is_numeric($record_id)) {
- throw new Exception('Please provide an integer record ID. The value provided was "' . $record_id . '"');
- }
- // Get the list of bundles for this table.
- $bundles = db_select('chado_bundle', 'CB')
- ->fields('CB', array('bundle_id'))
- ->condition('CB.data_table', $data_table)
- ->execute();
- // Look for the record ID in the appropriate chado table.
- while ($bundle_id = $bundles->fetchField()) {
- $entity_id = db_select('chado_bio_data_' . $bundle_id , 'CBD')
- ->fields('CBD', array('entity_id'))
- ->condition('record_id', $record_id)
- ->execute()
- ->fetchField();
- if ($entity_id) {
- return $entity_id;
- }
- }
- return NULL;
- }
- /**
- * A helper function that provides the Chado mapping table for the bundle.
- *
- * The tripal_chado module must map entities to their corresponding record
- * in Chado. Each bundl type has their own table for this mapping. This
- * function provides the name of the table given the bundle name. A mapping
- * table will only map to one table in Chado so the record_id's of the mapping
- * table should always be unique.
- *
- * @param $bundle
- * A bundle object (as retrieved from tripal_load_bundle_entity().
- *
- * @return
- * The name of the mapping table that Chado uses to map entities to records.
- *
- * @ingroup tripal_chado_entity_api
- */
- function chado_get_bundle_entity_table($bundle) {
- if (!$bundle) {
- return '';
- }
- return 'chado_' . $bundle->name;
- }
|