|
@@ -60,54 +60,172 @@ class ogi__location_on_map extends ChadoField {
|
|
|
public function elementInfo() {
|
|
|
$field_term = $this->getFieldTermID();
|
|
|
|
|
|
+ $map_term = 'data:1274';
|
|
|
$name_term = tripal_get_chado_semweb_term('featuremap', 'name');
|
|
|
$description_term = tripal_get_chado_semweb_term('featuremap', 'description');
|
|
|
$mappos_term = tripal_get_chado_semweb_term('featurepos', 'mappos');
|
|
|
+ $ref_feature_term = tripal_get_chado_semweb_term('featurepos', 'map_feature_id');
|
|
|
+ $ref_feature_name = tripal_get_chado_semweb_term('feature', 'name');
|
|
|
+ $ref_feature_id = tripal_get_chado_semweb_term('feature', 'uniquename');
|
|
|
+ $ref_feature_type = 'rdfs:type';
|
|
|
|
|
|
return array(
|
|
|
$field_term => array(
|
|
|
'sortable' => FALSE,
|
|
|
'searchable' => FALSE,
|
|
|
'elements' => array(
|
|
|
- 'data:1274' => array(
|
|
|
- 'name' => 'Map',
|
|
|
+ $map_term => array(
|
|
|
'searchable' => FALSE,
|
|
|
'sortable' => FALSE,
|
|
|
'elements' => array(
|
|
|
$name_term => array(
|
|
|
- 'name' => 'map_name',
|
|
|
'label' => 'Map Name',
|
|
|
'help' => 'The name of the map.',
|
|
|
'searchable' => TRUE,
|
|
|
- 'operations' => array('eq', 'ne', 'contains', 'starts'),
|
|
|
- 'sortable' => FALSE,
|
|
|
+ 'sortable' => TRUE,
|
|
|
),
|
|
|
$description_term => array(
|
|
|
- 'name' => 'map_description',
|
|
|
'label' => 'Map Description',
|
|
|
'help' => 'A description of the map.',
|
|
|
'searchable' => TRUE,
|
|
|
- 'operations' => array('eq', 'ne', 'contains', 'starts'),
|
|
|
'sortable' => FALSE,
|
|
|
),
|
|
|
+ 'entity' => array(
|
|
|
+ 'searchable' => FALSE,
|
|
|
+ 'sortable' => FALSE,
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ $ref_feature_term => array(
|
|
|
+ 'searchable' => FALSE,
|
|
|
+ 'sortable' => FALSE,
|
|
|
+ 'elements' => array(
|
|
|
+ $ref_feature_name => array(
|
|
|
+ 'label' => 'Map Reference Feature Name',
|
|
|
+ 'help' => 'The genomic or genetic feature Nameof the map on which this feature is mapped.',
|
|
|
+ 'searchable' => TRUE,
|
|
|
+ 'sortable' => TRUE,
|
|
|
+ ),
|
|
|
+ $ref_feature_id=> array(
|
|
|
+ 'label' => 'Map Reference Feature Identifier',
|
|
|
+ 'help' => 'The genomic or genetic feature of the map on which this feature is mapped.',
|
|
|
+ 'searchable' => TRUE,
|
|
|
+ 'sortable' => TRUE,
|
|
|
+ ),
|
|
|
+ $ref_feature_type=> array(
|
|
|
+ 'label' => 'Map Reference Feature Type',
|
|
|
+ 'help' => 'The type of genomic or genetic feature of the map on which this feature is mapped.',
|
|
|
+ 'searchable' => TRUE,
|
|
|
+ 'sortable' => TRUE,
|
|
|
+ ),
|
|
|
),
|
|
|
),
|
|
|
$mappos_term => array(
|
|
|
- 'name' => 'map_position_type',
|
|
|
- 'label' => 'Map Position Type',
|
|
|
+ 'label' => 'Map Reference Position',
|
|
|
'help' => 'Maps may use different coordinate systems. This indicates the type of coordinate.',
|
|
|
'searchable' => TRUE,
|
|
|
- 'operations' => array('eq', 'ne', 'contains', 'starts'),
|
|
|
- 'sortable' => FALSE,
|
|
|
- ),
|
|
|
- 'entity' => array(
|
|
|
- 'searchable' => FALSE,
|
|
|
- 'sortable' => FALSE,
|
|
|
+ 'sortable' => TRUE,
|
|
|
),
|
|
|
),
|
|
|
),
|
|
|
);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @see ChadoField::query()
|
|
|
+ */
|
|
|
+ public function query($query, $condition) {
|
|
|
+ $alias = $this->field['field_name'];
|
|
|
+ $operator = $condition['operator'];
|
|
|
+
|
|
|
+ // Map details.
|
|
|
+ $field_term_id = $this->getFieldTermID();
|
|
|
+ $map_term = 'data:1274';
|
|
|
+ $name_term = $field_term_id . ',' . $map_term . ',' . tripal_get_chado_semweb_term('featuremap', 'name');
|
|
|
+ $description_term = $field_term_id . ',' . $map_term . ',' . tripal_get_chado_semweb_term('featuremap', 'description');
|
|
|
+ $mappos_term = $field_term_id . ',' . tripal_get_chado_semweb_term('featurepos', 'mappos');
|
|
|
+
|
|
|
+ // Reference sequence details.
|
|
|
+ $ref_feature_term = tripal_get_chado_semweb_term('featurepos', 'map_feature_id');
|
|
|
+ $ref_feature_name = $field_term_id . ',' . $ref_feature_term . ',' .tripal_get_chado_semweb_term('feature', 'name');
|
|
|
+ $ref_feature_id = $field_term_id . ',' . $ref_feature_term . ',' .tripal_get_chado_semweb_term('feature', 'uniquename');
|
|
|
+ $ref_feature_type = $field_term_id . ',' . $ref_feature_term . ',' .'rdfs:type';
|
|
|
+
|
|
|
+ $this->queryJoinOnce($query, 'featurepos', $alias, "base.feature_id = $alias.feature_id");
|
|
|
+
|
|
|
+ if ($condition['column'] == $name_term) {
|
|
|
+ $this->queryJoinOnce($query, 'featuremap', $alias . '_map', $alias . '_map.featuremap_id = ' . $alias . '.featuremap_id');
|
|
|
+ $query->condition($alias . '_map.name', $condition['value'], $operator);
|
|
|
+ }
|
|
|
+ if ($condition['column'] == $description_term) {
|
|
|
+ $this->queryJoinOnce($query, 'featuremap', $alias . '_map', $alias . '_map.featuremap_id = ' . $alias . '.featuremap_id');
|
|
|
+ $query->condition($alias . '_map.description', $condition['value'], $operator);
|
|
|
+ }
|
|
|
+ if ($condition['column'] == $mappos_term) {
|
|
|
+ $query->condition($alias . '.mappos', $condition['value'], $operator);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($condition['column'] == $ref_feature_name) {
|
|
|
+ $this->queryJoinOnce($query, 'feature', $alias . '_mapref', $alias . '_mapref.feature_id = ' . $alias . '.map_feature_id');
|
|
|
+ $query->condition($alias . '_mapref.name', $condition['value'], $operator);
|
|
|
+ }
|
|
|
+ if ($condition['column'] == $ref_feature_id) {
|
|
|
+ $this->queryJoinOnce($query, 'feature', $alias . '_mapref', $alias . '_mapref.feature_id = ' . $alias . '.map_feature_id');
|
|
|
+ $query->condition($alias . '_mapref.uniquename', $condition['value'], $operator);
|
|
|
+ }
|
|
|
+ if ($condition['column'] == $ref_feature_type) {
|
|
|
+ $this->queryJoinOnce($query, 'feature', $alias . '_mapref', $alias . '_mapref.feature_id = ' . $alias . '.map_feature_id');
|
|
|
+ $this->queryJoinOnce($query, 'cvterm', $alias . '_mapref_cvterm', $alias . '_mapref_cvterm.cvterm_id = ' . $alias . '_mapref.type_id');
|
|
|
+ $query->condition($alias . '_mapref_cvterm.name', $condition['value'], $operator);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * @see ChadoField::queryOrder()
|
|
|
+ */
|
|
|
+ public function queryOrder($query, $order) {
|
|
|
+ $alias = $this->field['field_name'];
|
|
|
+
|
|
|
+ // Map details.
|
|
|
+ $field_term_id = $this->getFieldTermID();
|
|
|
+ $map_term = 'data:1274';
|
|
|
+ $name_term = $field_term_id . ',' . $map_term . ',' . tripal_get_chado_semweb_term('featuremap', 'name');
|
|
|
+ $description_term = $field_term_id . ',' . $map_term . ',' . tripal_get_chado_semweb_term('featuremap', 'description');
|
|
|
+ $mappos_term = $field_term_id . ',' . tripal_get_chado_semweb_term('featurepos', 'mappos');
|
|
|
+
|
|
|
+ // Reference sequence details.
|
|
|
+ $ref_feature_term = tripal_get_chado_semweb_term('featurepos', 'map_feature_id');
|
|
|
+ $ref_feature_name = $field_term_id . ',' . $ref_feature_term . ',' .tripal_get_chado_semweb_term('feature', 'name');
|
|
|
+ $ref_feature_id = $field_term_id . ',' . $ref_feature_term . ',' .tripal_get_chado_semweb_term('feature', 'uniquename');
|
|
|
+ $ref_feature_type = $field_term_id . ',' . $ref_feature_term . ',' .'rdfs:type';
|
|
|
+
|
|
|
+ $this->queryJoinOnce($query, 'featurepos', $alias, "base.feature_id = $alias.feature_id", 'LEFT OUTER');
|
|
|
+
|
|
|
+ if ($order['column'] == $name_term) {
|
|
|
+ $this->queryJoinOnce($query, 'featuremap', $alias . '_map', $alias . '_map.featuremap_id = ' . $alias . '.featuremap_id', 'LEFT OUTER');
|
|
|
+ $query->orderBy($alias . '_map.name', $order['direction']);
|
|
|
+ }
|
|
|
+ if ($order['column'] == $description_term) {
|
|
|
+ $this->queryJoinOnce($query, 'featuremap', $alias . '_map', $alias . '_map.featuremap_id = ' . $alias . '.featuremap_id', 'LEFT OUTER');
|
|
|
+ $query->orderBy($alias . '_map.description', $order['direction']);
|
|
|
+ }
|
|
|
+ if ($order['column'] == $mappos_term) {
|
|
|
+ $query->orderBy($alias . '.mappos', $order['direction']);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($order['column'] == $ref_feature_name) {
|
|
|
+ $this->queryJoinOnce($query, 'feature', $alias . '_mapref', $alias . '_mapref.feature_id = ' . $alias . '.map_feature_id', 'LEFT OUTER');
|
|
|
+ $query->orderBy($alias . '_mapref.name', $order['direction']);
|
|
|
+ }
|
|
|
+ if ($order['column'] == $ref_feature_id) {
|
|
|
+ $this->queryJoinOnce($query, 'feature', $alias . '_mapref', $alias . '_mapref.feature_id = ' . $alias . '.map_feature_id', 'LEFT OUTER');
|
|
|
+ $query->orderBy($alias . '_mapref.uniquename', $order['direction']);
|
|
|
+ }
|
|
|
+ if ($order['column'] == $ref_feature_type) {
|
|
|
+ $this->queryJoinOnce($query, 'feature', $alias . '_mapref', $alias . '_mapref.feature_id = ' . $alias . '.map_feature_id', 'LEFT OUTER');
|
|
|
+ $this->queryJoinOnce($query, 'cvterm', $alias . '_mapref_cvterm', $alias . '_mapref_cvterm.cvterm_id = ' . $alias . '_mapref.type_id', 'LEFT OUTER');
|
|
|
+ $query->orderBy($alias . '_mapref_cvterm.name', $order['direction']);
|
|
|
+ }
|
|
|
+ }
|
|
|
/**
|
|
|
*
|
|
|
* @see TripalField::load()
|
|
@@ -119,27 +237,33 @@ class ogi__location_on_map extends ChadoField {
|
|
|
$field_name = $this->field['field_name'];
|
|
|
$field_type = $this->field['type'];
|
|
|
|
|
|
+ // Map details
|
|
|
$map_term = 'data:1274';
|
|
|
$name_term = tripal_get_chado_semweb_term('featuremap', 'name');
|
|
|
$description_term = tripal_get_chado_semweb_term('featuremap', 'description');
|
|
|
$mappos_term = tripal_get_chado_semweb_term('featurepos', 'mappos');
|
|
|
|
|
|
+ // Reference sequence details.
|
|
|
+ $ref_feature_term = tripal_get_chado_semweb_term('featurepos', 'map_feature_id');
|
|
|
+ $ref_feature_name = tripal_get_chado_semweb_term('feature', 'name');
|
|
|
+ $ref_feature_id = tripal_get_chado_semweb_term('feature', 'uniquename');
|
|
|
+ $ref_feature_type = 'rdfs:type';
|
|
|
+
|
|
|
// Set some defaults for the empty record.
|
|
|
$entity->{$field_name}['und'][0] = array(
|
|
|
'value' => array(),
|
|
|
);
|
|
|
|
|
|
// Add the featurepos records to our $record.
|
|
|
- $options = array(
|
|
|
- 'return_array' => TRUE,
|
|
|
+ $options = array('return_array' => TRUE,
|
|
|
'include_fk' => array(
|
|
|
- 'srcfeature_id' => array(
|
|
|
+ 'map_feature_id' => array(
|
|
|
'type_id' => 1,
|
|
|
),
|
|
|
'feature_id' => array(
|
|
|
'type_id' => 1
|
|
|
),
|
|
|
- )
|
|
|
+ ),
|
|
|
);
|
|
|
$feature = chado_expand_var($record, 'table', 'featurepos', $options);
|
|
|
|
|
@@ -155,11 +279,19 @@ class ogi__location_on_map extends ChadoField {
|
|
|
$name_term => $featuremap->name,
|
|
|
$description_term => $featuremap->description,
|
|
|
),
|
|
|
+ $ref_feature_term => array(
|
|
|
+ $ref_feature_name => $featurepos->map_feature_id->name,
|
|
|
+ $ref_feature_id => $featurepos->map_feature_id->uniquename,
|
|
|
+ $ref_feature_type => $featurepos->map_feature_id->type_id->name,
|
|
|
+ ),
|
|
|
$mappos_term => $featurepos->mappos
|
|
|
);
|
|
|
if (property_exists($featuremap, 'entity_id')) {
|
|
|
$entity->{$field_name}['und'][$i]['value'][$map_term]['entity'] = 'TripalEntity:' . $featuremap->entity_id;
|
|
|
}
|
|
|
+ if (property_exists($featurepos->map_feature_id, 'entity_id')) {
|
|
|
+ $entity->{$field_name}['und'][$i]['value'][$map_term]['entity'] = 'TripalEntity:' . $featurepos->map_feature_id->entity_id;
|
|
|
+ }
|
|
|
$i++;
|
|
|
}
|
|
|
}
|