|  | @@ -1,430 +1,376 @@
 | 
											
												
													
														|  |  <?php
 |  |  <?php
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -/**
 |  | 
 | 
											
												
													
														|  | - * Implements hook_info() for fields.
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - * This is a hook provided by the tripal_chado module for offloading the
 |  | 
 | 
											
												
													
														|  | - * hook_field_info() hook for each field to specify.
 |  | 
 | 
											
												
													
														|  | - */
 |  | 
 | 
											
												
													
														|  | -function chado_linker__featureloc_info() {
 |  | 
 | 
											
												
													
														|  | -  return array(
 |  | 
 | 
											
												
													
														|  | -    'label' => t('Alignments'),
 |  | 
 | 
											
												
													
														|  | -    'description' => t('Locations on landmark sequences where the feature is aligned.'),
 |  | 
 | 
											
												
													
														|  | -    'default_widget' => 'chado_linker__featureloc_widget',
 |  | 
 | 
											
												
													
														|  | -    'default_formatter' => 'chado_linker__featureloc_formatter',
 |  | 
 | 
											
												
													
														|  | -    'settings' => array(),
 |  | 
 | 
											
												
													
														|  | -    'storage' => array(
 |  | 
 | 
											
												
													
														|  | -      'type' => 'field_chado_storage',
 |  | 
 | 
											
												
													
														|  | -      'module' => 'tripal_chado',
 |  | 
 | 
											
												
													
														|  | -      'active' => TRUE
 |  | 
 | 
											
												
													
														|  | -    ),
 |  | 
 | 
											
												
													
														|  | -  );
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -/**
 |  | 
 | 
											
												
													
														|  | - * Implements hook_attach_info().
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - * This is a hook provided by the tripal_Chado module. It allows the field
 |  | 
 | 
											
												
													
														|  | - * to specify which bundles it will attach to and to specify thee settings.
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - * @param $entity_type
 |  | 
 | 
											
												
													
														|  | - * @param $entity
 |  | 
 | 
											
												
													
														|  | - * @param $term
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - * @return
 |  | 
 | 
											
												
													
														|  | - *   A field array
 |  | 
 | 
											
												
													
														|  | - */
 |  | 
 | 
											
												
													
														|  | -function chado_linker__featureloc_attach_info($entity_type, $bundle, $target) {
 |  | 
 | 
											
												
													
														|  | -  $field_info = array();
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  $table_name = $target['data_table'];
 |  | 
 | 
											
												
													
														|  | -  $type_table = $target['type_table'];
 |  | 
 | 
											
												
													
														|  | -  $type_field = $target['field'];
 |  | 
 | 
											
												
													
														|  | -  $cv_id      = $target['cv_id'];
 |  | 
 | 
											
												
													
														|  | -  $cvterm_id  = $target['cvterm_id'];
 |  | 
 | 
											
												
													
														|  | 
 |  | +class chado_linker__featureloc extends TripalField {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -  // If  this is not the feature table then we don't want to attach.
 |  | 
 | 
											
												
													
														|  | -  if ($table_name != 'feature') {
 |  | 
 | 
											
												
													
														|  | -    return $field_info;
 |  | 
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * @see TripalField::field_info()
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  public function field_info() {
 | 
											
												
													
														|  | 
 |  | +    return array(
 | 
											
												
													
														|  | 
 |  | +      'label' => t('Aligned Locations'),
 | 
											
												
													
														|  | 
 |  | +      'description' => t('Locations on landmark sequences where the feature is aligned.'),
 | 
											
												
													
														|  | 
 |  | +      'default_widget' => 'chado_linker__featureloc_widget',
 | 
											
												
													
														|  | 
 |  | +      'default_formatter' => 'chado_linker__featureloc_formatter',
 | 
											
												
													
														|  | 
 |  | +      'settings' => array(),
 | 
											
												
													
														|  | 
 |  | +      'storage' => array(
 | 
											
												
													
														|  | 
 |  | +        'type' => 'field_chado_storage',
 | 
											
												
													
														|  | 
 |  | +        'module' => 'tripal_chado',
 | 
											
												
													
														|  | 
 |  | +        'active' => TRUE
 | 
											
												
													
														|  | 
 |  | +      ),
 | 
											
												
													
														|  | 
 |  | +    );
 | 
											
												
													
														|  |    }
 |  |    }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -  $schema = chado_get_schema('featureloc');
 |  | 
 | 
											
												
													
														|  | -  $pkey = $schema['primary key'][0];
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  // Initialize the field array.
 |  | 
 | 
											
												
													
														|  | -  $field_info = array(
 |  | 
 | 
											
												
													
														|  | -    'field_name' => 'featureloc',
 |  | 
 | 
											
												
													
														|  | -    'field_type' => 'chado_linker__featureloc',
 |  | 
 | 
											
												
													
														|  | -    'widget_type' => 'chado_linker__featureloc_widget',
 |  | 
 | 
											
												
													
														|  | -    'widget_settings' => array('display_label' => 1),
 |  | 
 | 
											
												
													
														|  | -    'description' => '',
 |  | 
 | 
											
												
													
														|  | -    'label' => 'Alignments',
 |  | 
 | 
											
												
													
														|  | -    'is_required' => 0,
 |  | 
 | 
											
												
													
														|  | -    'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 |  | 
 | 
											
												
													
														|  | -    'storage' => 'field_chado_storage',
 |  | 
 | 
											
												
													
														|  | -    'field_settings' => array(
 |  | 
 | 
											
												
													
														|  | -      'chado_table' => 'featureloc',
 |  | 
 | 
											
												
													
														|  | -      'chado_column' => $pkey,
 |  | 
 | 
											
												
													
														|  | -      'base_table' => 'feature',
 |  | 
 | 
											
												
													
														|  | -      'semantic_web' => array(
 |  | 
 | 
											
												
													
														|  | -        'name' => '',
 |  | 
 | 
											
												
													
														|  | -        'accession' => '',
 |  | 
 | 
											
												
													
														|  | -        'ns' => '',
 |  | 
 | 
											
												
													
														|  | -        'nsurl' => '',
 |  | 
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * @see TripalField::attach_info()
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  public function attach_info($entity_type, $bundle, $target) {
 | 
											
												
													
														|  | 
 |  | +    $field_info = array();
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    $table_name = $target['data_table'];
 | 
											
												
													
														|  | 
 |  | +    $type_table = $target['type_table'];
 | 
											
												
													
														|  | 
 |  | +    $type_field = $target['field'];
 | 
											
												
													
														|  | 
 |  | +    $cv_id      = $target['cv_id'];
 | 
											
												
													
														|  | 
 |  | +    $cvterm_id  = $target['cvterm_id'];
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    // If  this is not the feature table then we don't want to attach.
 | 
											
												
													
														|  | 
 |  | +    if ($table_name != 'feature') {
 | 
											
												
													
														|  | 
 |  | +      return $field_info;
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    $schema = chado_get_schema('featureloc');
 | 
											
												
													
														|  | 
 |  | +    $pkey = $schema['primary key'][0];
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    // Initialize the field array.
 | 
											
												
													
														|  | 
 |  | +    $field_info = array(
 | 
											
												
													
														|  | 
 |  | +      'field_name' => 'featureloc',
 | 
											
												
													
														|  | 
 |  | +      'field_type' => 'chado_linker__featureloc',
 | 
											
												
													
														|  | 
 |  | +      'widget_type' => 'chado_linker__featureloc_widget',
 | 
											
												
													
														|  | 
 |  | +      'widget_settings' => array('display_label' => 1),
 | 
											
												
													
														|  | 
 |  | +      'description' => '',
 | 
											
												
													
														|  | 
 |  | +      'label' => 'Aligned Locations',
 | 
											
												
													
														|  | 
 |  | +      'is_required' => 0,
 | 
											
												
													
														|  | 
 |  | +      'cardinality' => FIELD_CARDINALITY_UNLIMITED,
 | 
											
												
													
														|  | 
 |  | +      'storage' => 'field_chado_storage',
 | 
											
												
													
														|  | 
 |  | +      'field_settings' => array(
 | 
											
												
													
														|  | 
 |  | +        'chado_table' => 'featureloc',
 | 
											
												
													
														|  | 
 |  | +        'chado_column' => $pkey,
 | 
											
												
													
														|  | 
 |  | +        'base_table' => 'feature',
 | 
											
												
													
														|  | 
 |  | +        'semantic_web' => array(
 | 
											
												
													
														|  | 
 |  | +          'name' => '',
 | 
											
												
													
														|  | 
 |  | +          'accession' => '',
 | 
											
												
													
														|  | 
 |  | +          'ns' => '',
 | 
											
												
													
														|  | 
 |  | +          'nsurl' => '',
 | 
											
												
													
														|  | 
 |  | +        ),
 | 
											
												
													
														|  |        ),
 |  |        ),
 | 
											
												
													
														|  | -    ),
 |  | 
 | 
											
												
													
														|  | -  );
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -/**
 |  | 
 | 
											
												
													
														|  | - * Implements hook_widget_info.
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - * This is a hook provided by the tripal_chado module for offloading
 |  | 
 | 
											
												
													
														|  | - * the hook_field_widget_info() hook for each field to specify.
 |  | 
 | 
											
												
													
														|  | - */
 |  | 
 | 
											
												
													
														|  | -function chado_linker__featureloc_widget_info() {
 |  | 
 | 
											
												
													
														|  | -  return array(
 |  | 
 | 
											
												
													
														|  | -    'label' => t('Alignment Settings'),
 |  | 
 | 
											
												
													
														|  | -    'field types' => array('chado_linker__featureloc')
 |  | 
 | 
											
												
													
														|  | -  );
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -/**
 |  | 
 | 
											
												
													
														|  | - * Implements hook_formatter_info.
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - * This is a hook provided by the tripal_chado module for
 |  | 
 | 
											
												
													
														|  | - * offloading the hook_field_formatter_info() for each field
 |  | 
 | 
											
												
													
														|  | - * to specify.
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - */
 |  | 
 | 
											
												
													
														|  | -function chado_linker__featureloc_formatter_info() {
 |  | 
 | 
											
												
													
														|  | -  return array(
 |  | 
 | 
											
												
													
														|  | -    'label' => t('Alignments'),
 |  | 
 | 
											
												
													
														|  | -    'field types' => array('chado_linker__featureloc'),
 |  | 
 | 
											
												
													
														|  | -    'settings' => array(
 |  | 
 | 
											
												
													
														|  | -    ),
 |  | 
 | 
											
												
													
														|  | -  );
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | 
 |  | +    );
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -/**
 |  | 
 | 
											
												
													
														|  | - * Implements hook_formatter_settings_summary.
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - * This is a hook provided by the tripal_chado module for
 |  | 
 | 
											
												
													
														|  | - * offloading the hook_field_formatter_settings_summary() for each field
 |  | 
 | 
											
												
													
														|  | - * to specify.
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - */
 |  | 
 | 
											
												
													
														|  | -function chado_linker__featureloc_formatter_settings_summary($field, $instance,
 |  | 
 | 
											
												
													
														|  | -    $view_mode) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +    return $field_info;
 | 
											
												
													
														|  | 
 |  | +  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * @see TripalField::widget_info()
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  public function widget_info() {
 | 
											
												
													
														|  | 
 |  | +    return array(
 | 
											
												
													
														|  | 
 |  | +      'label' => t('Aligned Locations'),
 | 
											
												
													
														|  | 
 |  | +      'field types' => array('chado_linker__featureloc')
 | 
											
												
													
														|  | 
 |  | +    );
 | 
											
												
													
														|  | 
 |  | +  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -/**
 |  | 
 | 
											
												
													
														|  | - * Provides a settings form for the formatter.
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - * This is a hook provided by the tripal_chado module for
 |  | 
 | 
											
												
													
														|  | - * offloading the hook_field_formatter_settings_form() for each field
 |  | 
 | 
											
												
													
														|  | - * to specify.
 |  | 
 | 
											
												
													
														|  | - */
 |  | 
 | 
											
												
													
														|  | -function chado_linker__featureloc_formatter_settings_form($field, $instance,
 |  | 
 | 
											
												
													
														|  | -    $view_mode, $form, &$form_state) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * @see TripalField::formatter_info()
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  public function formatter_info() {
 | 
											
												
													
														|  | 
 |  | +    return array(
 | 
											
												
													
														|  | 
 |  | +      'label' => t('Aligned Locations'),
 | 
											
												
													
														|  | 
 |  | +      'field types' => array('chado_linker__featureloc'),
 | 
											
												
													
														|  | 
 |  | +      'settings' => array(
 | 
											
												
													
														|  | 
 |  | +      ),
 | 
											
												
													
														|  | 
 |  | +    );
 | 
											
												
													
														|  | 
 |  | +  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * @see TripalField::formatter_settings_summary()
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  public function formatter_settings_summary($field, $instance,
 | 
											
												
													
														|  | 
 |  | +      $view_mode) {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * @see TripalField::formatter_settings_form()
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  public function formatter_settings_form($field, $instance,
 | 
											
												
													
														|  | 
 |  | +      $view_mode, $form, &$form_state) {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -/**
 |  | 
 | 
											
												
													
														|  | - * Validation function for the chado_linker_featureloc_formatter_settings_form.
 |  | 
 | 
											
												
													
														|  | - */
 |  | 
 | 
											
												
													
														|  | -function chado_linker__featureloc_formatter_settings_form_validate(&$form, &$form_state) {
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -  // Place here as an example for validating the settings form.
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -/**
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - */
 |  | 
 | 
											
												
													
														|  | -function chado_linker__featureloc_formatter(&$element, $entity_type, $entity,
 |  | 
 | 
											
												
													
														|  | -    $field, $instance, $langcode, $items, $display) {
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  // Get the settings
 |  | 
 | 
											
												
													
														|  | -  $settings = $display['settings'];
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  foreach ($items as $delta => $item) {
 |  | 
 | 
											
												
													
														|  | -    $alignments = $item['featurelocs'];
 |  | 
 | 
											
												
													
														|  | -    if (count($alignments) > 0){
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -      // the $headers array is an array of fields to use as the colum headers.
 |  | 
 | 
											
												
													
														|  | -      // additional documentation can be found here
 |  | 
 | 
											
												
													
														|  | -      // https://api.drupal.org/api/drupal/includes%21theme.inc/function/theme_table/7
 |  | 
 | 
											
												
													
														|  | -      $headers = array('Aligned Feature' ,'Feature Type', 'Alignment Location');
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -      // the $rows array contains an array of rows where each row is an array
 |  | 
 | 
											
												
													
														|  | -      // of values for each column of the table in that row.  Additional documentation
 |  | 
 | 
											
												
													
														|  | -      // can be found here:
 |  | 
 | 
											
												
													
														|  | -      // https://api.drupal.org/api/drupal/includes%21theme.inc/function/theme_table/7
 |  | 
 | 
											
												
													
														|  | -      $rows = array();
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -      foreach ($alignments as $alignment){
 |  | 
 | 
											
												
													
														|  | -        $feature_name = $alignment->name;
 |  | 
 | 
											
												
													
														|  | -        if (property_exists($alignment, 'nid')) {
 |  | 
 | 
											
												
													
														|  | -          $feature_name = l($feature_name, "node/" . $alignment->nid);
 |  | 
 | 
											
												
													
														|  | -        }
 |  | 
 | 
											
												
													
														|  | -        $feature_loc = '';
 |  | 
 | 
											
												
													
														|  | -        $strand = '.';
 |  | 
 | 
											
												
													
														|  | -        if ($alignment->strand == -1) {
 |  | 
 | 
											
												
													
														|  | -          $strand = '-';
 |  | 
 | 
											
												
													
														|  | -        }
 |  | 
 | 
											
												
													
														|  | -        elseif ($alignment->strand == 1) {
 |  | 
 | 
											
												
													
														|  | -           $strand = '+';
 |  | 
 | 
											
												
													
														|  | -        }
 |  | 
 | 
											
												
													
														|  | -        // if this is a match then make the other location
 |  | 
 | 
											
												
													
														|  | -        if(property_exists($alignment, 'right_feature')){
 |  | 
 | 
											
												
													
														|  | -          $rstrand = '.';
 |  | 
 | 
											
												
													
														|  | -          if ($alignment->right_strand == -1) {
 |  | 
 | 
											
												
													
														|  | -            $rstrand = '-';
 |  | 
 | 
											
												
													
														|  | -          }
 |  | 
 | 
											
												
													
														|  | -          elseif ($alignment->right_strand == 1) {
 |  | 
 | 
											
												
													
														|  | -            $rstrand = '+';
 |  | 
 | 
											
												
													
														|  | -          }
 |  | 
 | 
											
												
													
														|  | -          $feature_loc = $feature->name .":". ($alignment->fmin + 1) . ".." . $alignment->fmax . " " . $strand;
 |  | 
 | 
											
												
													
														|  | -          $feature_loc .= "<br>" . $alignment->name .":". ($alignment->right_fmin + 1) . ".." . $alignment->right_fmax . " " . $rstrand;
 |  | 
 | 
											
												
													
														|  | 
 |  | +  }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * @see TripalField::formatter_view()
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  function formatter_view(&$element, $entity_type, $entity,
 | 
											
												
													
														|  | 
 |  | +      $field, $instance, $langcode, $items, $display) {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    // Get the settings
 | 
											
												
													
														|  | 
 |  | +    $settings = $display['settings'];
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    $rows = array();
 | 
											
												
													
														|  | 
 |  | +    $headers = array('Aligned Feature' ,'Feature Type', 'Alignment Location');
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    foreach ($items as $delta => $item) {
 | 
											
												
													
														|  | 
 |  | +      $alignment = $item['value'];
 | 
											
												
													
														|  | 
 |  | +      $feature_name = $alignment['name'];
 | 
											
												
													
														|  | 
 |  | +      $feature_loc = '';
 | 
											
												
													
														|  | 
 |  | +      $strand = '.';
 | 
											
												
													
														|  | 
 |  | +      if ($alignment['strand'] == -1) {
 | 
											
												
													
														|  | 
 |  | +        $strand = '-';
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +      elseif ($alignment['strand'] == 1) {
 | 
											
												
													
														|  | 
 |  | +         $strand = '+';
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +      // if this is a match then make the other location
 | 
											
												
													
														|  | 
 |  | +      if(array_key_exists($alignment, 'right_feature')){
 | 
											
												
													
														|  | 
 |  | +        $rstrand = '.';
 | 
											
												
													
														|  | 
 |  | +        if ($alignment['right_strand'] == -1) {
 | 
											
												
													
														|  | 
 |  | +          $rstrand = '-';
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -        else {
 |  | 
 | 
											
												
													
														|  | -          $feature_loc = $alignment->name .":". ($alignment->fmin + 1) . ".." . $alignment->fmax . " " . $strand;
 |  | 
 | 
											
												
													
														|  | 
 |  | +        elseif ($alignment['right_strand'] == 1) {
 | 
											
												
													
														|  | 
 |  | +          $rstrand = '+';
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -        $rows[] = array(
 |  | 
 | 
											
												
													
														|  | -          $feature_name,
 |  | 
 | 
											
												
													
														|  | -          $alignment->type,
 |  | 
 | 
											
												
													
														|  | -          $feature_loc
 |  | 
 | 
											
												
													
														|  | -        );
 |  | 
 | 
											
												
													
														|  | 
 |  | +        $feature_loc = $feature['name'] .":". ($alignment['fmin'] + 1) . ".." . $alignment['fmax'] . " " . $strand;
 | 
											
												
													
														|  | 
 |  | +        $feature_loc .= "<br>" . $alignment['name'] .":". ($alignment['right_fmin'] + 1) . ".." . $alignment['right_fmax'] . " " . $rstrand;
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +      else {
 | 
											
												
													
														|  | 
 |  | +        $feature_loc = $alignment['name'] .":". ($alignment['fmin'] + 1) . ".." . $alignment['fmax'] . " " . $strand;
 | 
											
												
													
														|  |        }
 |  |        }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -      // the $table array contains the headers and rows array as well as other
 |  | 
 | 
											
												
													
														|  | -      // options for controlling the display of the table.  Additional
 |  | 
 | 
											
												
													
														|  | -      // documentation can be found here:
 |  | 
 | 
											
												
													
														|  | -      // https://api.drupal.org/api/drupal/includes%21theme.inc/function/theme_table/7
 |  | 
 | 
											
												
													
														|  | -      $table = array(
 |  | 
 | 
											
												
													
														|  | -        'header' => $headers,
 |  | 
 | 
											
												
													
														|  | -        'rows' => $rows,
 |  | 
 | 
											
												
													
														|  | -        'attributes' => array(
 |  | 
 | 
											
												
													
														|  | -          'id' => 'tripal_feature-table-alignments',
 |  | 
 | 
											
												
													
														|  | -          'class' => 'tripal-data-table'
 |  | 
 | 
											
												
													
														|  | -        ),
 |  | 
 | 
											
												
													
														|  | -        'sticky' => FALSE,
 |  | 
 | 
											
												
													
														|  | -        'caption' => '',
 |  | 
 | 
											
												
													
														|  | -        'colgroups' => array(),
 |  | 
 | 
											
												
													
														|  | -        'empty' => '',
 |  | 
 | 
											
												
													
														|  | -      );
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -      // once we have our table array structure defined, we call Drupal's theme_table()
 |  | 
 | 
											
												
													
														|  | -      // function to generate the table.
 |  | 
 | 
											
												
													
														|  | -      $element[$delta] = array(
 |  | 
 | 
											
												
													
														|  | -        '#type' => 'markup',
 |  | 
 | 
											
												
													
														|  | -        '#markup' => theme_table($table),
 |  | 
 | 
											
												
													
														|  | 
 |  | +      $rows[] = array(
 | 
											
												
													
														|  | 
 |  | +        $feature_name,
 | 
											
												
													
														|  | 
 |  | +        $alignment['type'],
 | 
											
												
													
														|  | 
 |  | +        $feature_loc
 | 
											
												
													
														|  |        );
 |  |        );
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -/**
 |  | 
 | 
											
												
													
														|  | - * Loads the field values with appropriate data.
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - * This function is called by the tripal_chado_field_storage_load() for
 |  | 
 | 
											
												
													
														|  | - * each property managed by the field_chado_storage storage type.  This is
 |  | 
 | 
											
												
													
														|  | - * an optional hook function that is only needed if the field has
 |  | 
 | 
											
												
													
														|  | - * multiple form elements.
 |  | 
 | 
											
												
													
														|  | - */
 |  | 
 | 
											
												
													
														|  | -function chado_linker__featureloc_load($field, $entity, $base_table, $record) {
 |  | 
 | 
											
												
													
														|  | -  $field_name = $field['field_name'];
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  $options = array(
 |  | 
 | 
											
												
													
														|  | -    'return_array' => 1,
 |  | 
 | 
											
												
													
														|  | -    'include_fk' => array(
 |  | 
 | 
											
												
													
														|  | -      'srcfeature_id' => array(
 |  | 
 | 
											
												
													
														|  | -        'type_id' => 1,
 |  | 
 | 
											
												
													
														|  | -      ),
 |  | 
 | 
											
												
													
														|  | -      'feature_id' => array(
 |  | 
 | 
											
												
													
														|  | -        'type_id' => 1
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    // the $table array contains the headers and rows array as well as other
 | 
											
												
													
														|  | 
 |  | +    // options for controlling the display of the table.  Additional
 | 
											
												
													
														|  | 
 |  | +    // documentation can be found here:
 | 
											
												
													
														|  | 
 |  | +    // https://api.drupal.org/api/drupal/includes%21theme.inc/function/theme_table/7
 | 
											
												
													
														|  | 
 |  | +    $table = array(
 | 
											
												
													
														|  | 
 |  | +      'header' => $headers,
 | 
											
												
													
														|  | 
 |  | +      'rows' => $rows,
 | 
											
												
													
														|  | 
 |  | +      'attributes' => array(
 | 
											
												
													
														|  | 
 |  | +        'id' => 'tripal_feature-table-alignments',
 | 
											
												
													
														|  | 
 |  | +        'class' => 'tripal-data-table'
 | 
											
												
													
														|  |        ),
 |  |        ),
 | 
											
												
													
														|  | -    )
 |  | 
 | 
											
												
													
														|  | -  );
 |  | 
 | 
											
												
													
														|  | -  $feature = chado_expand_var($record, 'table', 'featureloc', $options);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  // get alignments as child
 |  | 
 | 
											
												
													
														|  | -  $cfeaturelocs = $feature->featureloc->feature_id;
 |  | 
 | 
											
												
													
														|  | -  if (!$cfeaturelocs) {
 |  | 
 | 
											
												
													
														|  | -    $cfeaturelocs = array();
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -  // get alignment as parent
 |  | 
 | 
											
												
													
														|  | -  $pfeaturelocs = $feature->featureloc->srcfeature_id;
 |  | 
 | 
											
												
													
														|  | -  if (!$pfeaturelocs) {
 |  | 
 | 
											
												
													
														|  | -    $pfeaturelocs = array();
 |  | 
 | 
											
												
													
														|  | 
 |  | +      'sticky' => FALSE,
 | 
											
												
													
														|  | 
 |  | +      'caption' => '',
 | 
											
												
													
														|  | 
 |  | +      'colgroups' => array(),
 | 
											
												
													
														|  | 
 |  | +      'empty' => '',
 | 
											
												
													
														|  | 
 |  | +    );
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    // once we have our table array structure defined, we call Drupal's theme_table()
 | 
											
												
													
														|  | 
 |  | +    // function to generate the table.
 | 
											
												
													
														|  | 
 |  | +    $element[$delta] = array(
 | 
											
												
													
														|  | 
 |  | +      '#type' => 'markup',
 | 
											
												
													
														|  | 
 |  | +      '#markup' => theme_table($table),
 | 
											
												
													
														|  | 
 |  | +    );
 | 
											
												
													
														|  |    }
 |  |    }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -  // get matched alignments (those with an itermediate 'match' or 'EST_match', etc
 |  | 
 | 
											
												
													
														|  | -  $mfeaturelocs = chado_linker__featureloc_get_matched_alignments($feature);
 |  | 
 | 
											
												
													
														|  | -  $feature->matched_featurelocs = $mfeaturelocs;
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -  // combine all three alignments into a single array for printing together in
 |  | 
 | 
											
												
													
														|  | -  // a single list
 |  | 
 | 
											
												
													
														|  | -  $alignments = array();
 |  | 
 | 
											
												
													
														|  | -  foreach ($pfeaturelocs as $featureloc) {
 |  | 
 | 
											
												
													
														|  | -    // if type is a 'match' then ignore it. We will handle those below
 |  | 
 | 
											
												
													
														|  | -    if (preg_match('/(^match$|^.*?_match|match_part)$/', $featureloc->feature_id->type_id->name)) {
 |  | 
 | 
											
												
													
														|  | -      continue;
 |  | 
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * @see TripalField::load()
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  function load($field, $entity, $details) {
 | 
											
												
													
														|  | 
 |  | +    $record = $details['record'];
 | 
											
												
													
														|  | 
 |  | +    $settings = $field['settings'];
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    $field_name = $field['field_name'];
 | 
											
												
													
														|  | 
 |  | +    $field_type = $field['type'];
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    $options = array(
 | 
											
												
													
														|  | 
 |  | +      'return_array' => TRUE,
 | 
											
												
													
														|  | 
 |  | +      'include_fk' => array(
 | 
											
												
													
														|  | 
 |  | +        'srcfeature_id' => array(
 | 
											
												
													
														|  | 
 |  | +          'type_id' => 1,
 | 
											
												
													
														|  | 
 |  | +        ),
 | 
											
												
													
														|  | 
 |  | +        'feature_id' => array(
 | 
											
												
													
														|  | 
 |  | +          'type_id' => 1
 | 
											
												
													
														|  | 
 |  | +        ),
 | 
											
												
													
														|  | 
 |  | +      )
 | 
											
												
													
														|  | 
 |  | +    );
 | 
											
												
													
														|  | 
 |  | +    $feature = chado_expand_var($record, 'table', 'featureloc', $options);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    // Get alignments as child
 | 
											
												
													
														|  | 
 |  | +    $cfeaturelocs = $feature->featureloc->feature_id;
 | 
											
												
													
														|  | 
 |  | +    if (!$cfeaturelocs) {
 | 
											
												
													
														|  | 
 |  | +      $cfeaturelocs = array();
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | -    $alignment = new stdClass();
 |  | 
 | 
											
												
													
														|  | -    $alignment->record = $featureloc;
 |  | 
 | 
											
												
													
														|  | -    $alignment->name = $featureloc->feature_id->name;
 |  | 
 | 
											
												
													
														|  | -    $alignment->type = $featureloc->feature_id->type_id->name;
 |  | 
 | 
											
												
													
														|  | -    $alignment->fmin = $featureloc->fmin;
 |  | 
 | 
											
												
													
														|  | -    $alignment->fmax = $featureloc->fmax;
 |  | 
 | 
											
												
													
														|  | -    $alignment->phase = $featureloc->phase;
 |  | 
 | 
											
												
													
														|  | -    $alignment->strand = $featureloc->strand;
 |  | 
 | 
											
												
													
														|  | -    $alignments[] = $alignment;
 |  | 
 | 
											
												
													
														|  | -    if (property_exists($featureloc->feature_id, 'nid')) {
 |  | 
 | 
											
												
													
														|  | -      $alignment->nid = $featureloc->feature_id->nid;
 |  | 
 | 
											
												
													
														|  | 
 |  | +    // Get alignment as parent
 | 
											
												
													
														|  | 
 |  | +    $pfeaturelocs = $feature->featureloc->srcfeature_id;
 | 
											
												
													
														|  | 
 |  | +    if (!$pfeaturelocs) {
 | 
											
												
													
														|  | 
 |  | +      $pfeaturelocs = array();
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -  foreach ($cfeaturelocs as $featureloc) {
 |  | 
 | 
											
												
													
														|  | -    // if type is a 'match' then ignore it. We will handle those below
 |  | 
 | 
											
												
													
														|  | -    if (preg_match('/(^match$|^.*?_match|match_part)$/', $featureloc->feature_id->type_id->name)) {
 |  | 
 | 
											
												
													
														|  | -      continue;
 |  | 
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    // Get matched alignments (those with an itermediate 'match' or 'EST_match', etc
 | 
											
												
													
														|  | 
 |  | +    $mfeaturelocs = $this->get_matched_alignments($feature);
 | 
											
												
													
														|  | 
 |  | +    $feature->matched_featurelocs = $mfeaturelocs;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    // Combine all three alignments into a single array for printing together in
 | 
											
												
													
														|  | 
 |  | +    // a single list
 | 
											
												
													
														|  | 
 |  | +    $alignments = array();
 | 
											
												
													
														|  | 
 |  | +    foreach ($pfeaturelocs as $featureloc) {
 | 
											
												
													
														|  | 
 |  | +      // if type is a 'match' then ignore it. We will handle those below
 | 
											
												
													
														|  | 
 |  | +      if (preg_match('/(^match$|^.*?_match|match_part)$/', $featureloc->feature_id->type_id->name)) {
 | 
											
												
													
														|  | 
 |  | +        continue;
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +      $alignments[] = array(
 | 
											
												
													
														|  | 
 |  | +        'name' => $featureloc->feature_id->name,
 | 
											
												
													
														|  | 
 |  | +        'type' => $featureloc->feature_id->type_id->name,
 | 
											
												
													
														|  | 
 |  | +        'fmin' => $featureloc->fmin,
 | 
											
												
													
														|  | 
 |  | +        'fmax' => $featureloc->fmax,
 | 
											
												
													
														|  | 
 |  | +        'phase' => $featureloc->phase,
 | 
											
												
													
														|  | 
 |  | +        'strand' => $featureloc->strand,
 | 
											
												
													
														|  | 
 |  | +      );
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | -    $alignment = new stdClass();
 |  | 
 | 
											
												
													
														|  | -    $alignment->record = $featureloc;
 |  | 
 | 
											
												
													
														|  | -    $alignment->name = $featureloc->srcfeature_id->name;
 |  | 
 | 
											
												
													
														|  | -    $alignment->type = $featureloc->srcfeature_id->type_id->name;
 |  | 
 | 
											
												
													
														|  | -    $alignment->fmin = $featureloc->fmin;
 |  | 
 | 
											
												
													
														|  | -    $alignment->is_fmin_partial = $featureloc->is_fmin_partial;
 |  | 
 | 
											
												
													
														|  | -    $alignment->fmax = $featureloc->fmax;
 |  | 
 | 
											
												
													
														|  | -    $alignment->is_fmax_partial = $featureloc->is_fmax_partial;
 |  | 
 | 
											
												
													
														|  | -    $alignment->phase = $featureloc->phase;
 |  | 
 | 
											
												
													
														|  | -    $alignment->strand = $featureloc->strand;
 |  | 
 | 
											
												
													
														|  | -    $alignments[] = $alignment;
 |  | 
 | 
											
												
													
														|  | -    if (property_exists($featureloc->srcfeature_id, 'nid')) {
 |  | 
 | 
											
												
													
														|  | -      $alignment->nid = $featureloc->srcfeature_id->nid;
 |  | 
 | 
											
												
													
														|  | 
 |  | +    foreach ($cfeaturelocs as $featureloc) {
 | 
											
												
													
														|  | 
 |  | +      // if type is a 'match' then ignore it. We will handle those below
 | 
											
												
													
														|  | 
 |  | +      if (preg_match('/(^match$|^.*?_match|match_part)$/', $featureloc->feature_id->type_id->name)) {
 | 
											
												
													
														|  | 
 |  | +        continue;
 | 
											
												
													
														|  | 
 |  | +      }
 | 
											
												
													
														|  | 
 |  | +      $alignments[] = array(
 | 
											
												
													
														|  | 
 |  | +        'name' => $featureloc->srcfeature_id->name,
 | 
											
												
													
														|  | 
 |  | +        'type' => $featureloc->srcfeature_id->type_id->name,
 | 
											
												
													
														|  | 
 |  | +        'fmin' => $featureloc->fmin,
 | 
											
												
													
														|  | 
 |  | +        'is_fmin_partial' => $featureloc->is_fmin_partial,
 | 
											
												
													
														|  | 
 |  | +        'fmax' => $featureloc->fmax,
 | 
											
												
													
														|  | 
 |  | +        'is_fmax_partial' => $featureloc->is_fmax_partial,
 | 
											
												
													
														|  | 
 |  | +        'phase' => $featureloc->phase,
 | 
											
												
													
														|  | 
 |  | +        'strand' => $featureloc->strand,
 | 
											
												
													
														|  | 
 |  | +      );
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -  // in matching features, the left feature is always the feature
 |  | 
 | 
											
												
													
														|  | -  // provided to this function.
 |  | 
 | 
											
												
													
														|  | -  foreach ($mfeaturelocs as $featureloc) {
 |  | 
 | 
											
												
													
														|  | -    // get more information about the right feature
 |  | 
 | 
											
												
													
														|  | -    $select = array('feature_id' => $featureloc->right_srcfeature_id);
 |  | 
 | 
											
												
													
														|  | -    $rfeature = chado_generate_var('feature', $select);
 |  | 
 | 
											
												
													
														|  | -    // now add to the list
 |  | 
 | 
											
												
													
														|  | -    $alignment = new stdClass();
 |  | 
 | 
											
												
													
														|  | -    $alignment->record = $featureloc;
 |  | 
 | 
											
												
													
														|  | -    $alignment->right_feature = $rfeature;
 |  | 
 | 
											
												
													
														|  | -    $alignment->name = $rfeature->name;
 |  | 
 | 
											
												
													
														|  | -    $alignment->type = $rfeature->type_id->name;
 |  | 
 | 
											
												
													
														|  | -    $alignment->fmin = $featureloc->left_fmin;
 |  | 
 | 
											
												
													
														|  | -    $alignment->is_fmin_partial = $featureloc->left_is_fmin_partial;
 |  | 
 | 
											
												
													
														|  | -    $alignment->fmax = $featureloc->left_fmax;
 |  | 
 | 
											
												
													
														|  | -    $alignment->is_fmax_partial = $featureloc->left_is_fmax_partial;
 |  | 
 | 
											
												
													
														|  | -    $alignment->phase = $featureloc->left_phase;
 |  | 
 | 
											
												
													
														|  | -    $alignment->strand = $featureloc->left_strand;
 |  | 
 | 
											
												
													
														|  | -    $alignment->right_fmin = $featureloc->right_fmin;
 |  | 
 | 
											
												
													
														|  | -    $alignment->right_is_fmin_partial = $featureloc->right_is_fmin_partial;
 |  | 
 | 
											
												
													
														|  | -    $alignment->right_fmax = $featureloc->right_fmax;
 |  | 
 | 
											
												
													
														|  | -    $alignment->right_is_fmax_partial = $featureloc->right_is_fmax_partial;
 |  | 
 | 
											
												
													
														|  | -    $alignment->right_phase = $featureloc->right_phase;
 |  | 
 | 
											
												
													
														|  | -    $alignment->right_strand = $featureloc->right_strand;
 |  | 
 | 
											
												
													
														|  | -    $alignments[] = $alignment;
 |  | 
 | 
											
												
													
														|  | -    if (property_exists($rfeature, 'nid')) {
 |  | 
 | 
											
												
													
														|  | -      $alignment->nid = $rfeature->nid;
 |  | 
 | 
											
												
													
														|  | 
 |  | +    // in matching features, the left feature is always the feature
 | 
											
												
													
														|  | 
 |  | +    // provided to this function.
 | 
											
												
													
														|  | 
 |  | +    foreach ($mfeaturelocs as $featureloc) {
 | 
											
												
													
														|  | 
 |  | +      // get more information about the right feature
 | 
											
												
													
														|  | 
 |  | +      $select = array('feature_id' => $featureloc->right_srcfeature_id);
 | 
											
												
													
														|  | 
 |  | +      $rfeature = chado_generate_var('feature', $select);
 | 
											
												
													
														|  | 
 |  | +      // now add to the list
 | 
											
												
													
														|  | 
 |  | +      $alignments[] = array(
 | 
											
												
													
														|  | 
 |  | +        'name' => $rfeature->name,
 | 
											
												
													
														|  | 
 |  | +        'type' => $rfeature->type_id->name,
 | 
											
												
													
														|  | 
 |  | +        'fmin' => $featureloc->left_fmin,
 | 
											
												
													
														|  | 
 |  | +        'is_fmin_partial' => $featureloc->left_is_fmin_partial,
 | 
											
												
													
														|  | 
 |  | +        'fmax' => $featureloc->left_fmax,
 | 
											
												
													
														|  | 
 |  | +        'is_fmax_partial' => $featureloc->left_is_fmax_partial,
 | 
											
												
													
														|  | 
 |  | +        'phase' => $featureloc->left_phase,
 | 
											
												
													
														|  | 
 |  | +        'strand' => $featureloc->left_strand,
 | 
											
												
													
														|  | 
 |  | +        'right_fmin' => $featureloc->right_fmin,
 | 
											
												
													
														|  | 
 |  | +        'right_is_fmin_partial' => $featureloc->right_is_fmin_partial,
 | 
											
												
													
														|  | 
 |  | +        'right_fmax' => $featureloc->right_fmax,
 | 
											
												
													
														|  | 
 |  | +        'right_is_fmax_partial' => $featureloc->right_is_fmax_partial,
 | 
											
												
													
														|  | 
 |  | +        'right_phase' => $featureloc->right_phase,
 | 
											
												
													
														|  | 
 |  | +        'right_strand' => $featureloc->right_strand,
 | 
											
												
													
														|  | 
 |  | +      );
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  | 
 |  | +    $i = 0;
 | 
											
												
													
														|  | 
 |  | +    foreach ($alignments as $alignment) {
 | 
											
												
													
														|  | 
 |  | +      $entity->{$field_name}['und'][$i]['value'] = $alignment;
 | 
											
												
													
														|  | 
 |  | +      $i++;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |    }
 |  |    }
 | 
											
												
													
														|  | -  $entity->{$field_name}['und'][0]['featurelocs'] = $alignments;
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -/**
 |  | 
 | 
											
												
													
														|  | - * This function is for features that align through an intermediate such
 |  | 
 | 
											
												
													
														|  | - * as 'EST_match' or 'match'.  This occurs in the case where two sequences
 |  | 
 | 
											
												
													
														|  | - * align but where one does not align perfectly.  Some ESTs may be in a contig
 |  | 
 | 
											
												
													
														|  | - * but not all of the EST.  Portions may overhang and not be included in the
 |  | 
 | 
											
												
													
														|  | - * consensus if quality is bad.
 |  | 
 | 
											
												
													
														|  | - * For example:
 |  | 
 | 
											
												
													
														|  | - *    Feature 1: Contig --------------------
 |  | 
 | 
											
												
													
														|  | - *    Feature 2: EST_match           -------
 |  | 
 | 
											
												
													
														|  | - *    Feature 3: EST                 ---------
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - * The feature provided to the function will always be the feature 1.  The
 |  | 
 | 
											
												
													
														|  | - * featureloc columns prefixed with 'right' (e.g. right_fmin) belong to the
 |  | 
 | 
											
												
													
														|  | - * alignment of feature 3 with feature 2
 |  | 
 | 
											
												
													
														|  | - *
 |  | 
 | 
											
												
													
														|  | - * Features may align to more than one feature and are not matches. We do
 |  | 
 | 
											
												
													
														|  | -   * not want to include these, so we have to filter on the SO terms:
 |  | 
 | 
											
												
													
														|  | -   * match, or %_match
 |  | 
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * This function is for features that align through an intermediate such
 | 
											
												
													
														|  | 
 |  | +   * as 'EST_match' or 'match'.  This occurs in the case where two sequences
 | 
											
												
													
														|  | 
 |  | +   * align but where one does not align perfectly.  Some ESTs may be in a contig
 | 
											
												
													
														|  | 
 |  | +   * but not all of the EST.  Portions may overhang and not be included in the
 | 
											
												
													
														|  | 
 |  | +   * consensus if quality is bad.
 | 
											
												
													
														|  | 
 |  | +   * For example:
 | 
											
												
													
														|  | 
 |  | +   *    Feature 1: Contig --------------------
 | 
											
												
													
														|  | 
 |  | +   *    Feature 2: EST_match           -------
 | 
											
												
													
														|  | 
 |  | +   *    Feature 3: EST                 ---------
 | 
											
												
													
														|  |     *
 |  |     *
 | 
											
												
													
														|  | -   * @ingroup tripal_feature
 |  | 
 | 
											
												
													
														|  | -   */
 |  | 
 | 
											
												
													
														|  | - function chado_linker__featureloc_get_matched_alignments($feature) {
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -   $sql = "
 |  | 
 | 
											
												
													
														|  | -     SELECT
 |  | 
 | 
											
												
													
														|  | -       FL1.featureloc_id    as left_featureloc_id,
 |  | 
 | 
											
												
													
														|  | -       FL1.srcfeature_id    as left_srcfeature_id,
 |  | 
 | 
											
												
													
														|  | -       FL1.feature_id       as left_feature_id,
 |  | 
 | 
											
												
													
														|  | -       FL1.fmin             as left_fmin,
 |  | 
 | 
											
												
													
														|  | -       FL1.is_fmin_partial  as left_is_fmin_partial,
 |  | 
 | 
											
												
													
														|  | -       FL1.fmax             as left_fmax,
 |  | 
 | 
											
												
													
														|  | -       FL1.is_fmax_partial  as left_is_fmax_partial,
 |  | 
 | 
											
												
													
														|  | -       FL1.strand           as left_strand,
 |  | 
 | 
											
												
													
														|  | -       FL1.phase            as left_phase,
 |  | 
 | 
											
												
													
														|  | -       FL1.locgroup         as left_locgroup,
 |  | 
 | 
											
												
													
														|  | -       FL1.rank             as left_rank,
 |  | 
 | 
											
												
													
														|  | -       FL2.featureloc_id    as right_featureloc_id,
 |  | 
 | 
											
												
													
														|  | -       FL2.srcfeature_id    as right_srcfeature_id,
 |  | 
 | 
											
												
													
														|  | -       FL2.feature_id       as right_feature_id,
 |  | 
 | 
											
												
													
														|  | -       FL2.fmin             as right_fmin,
 |  | 
 | 
											
												
													
														|  | -       FL2.is_fmin_partial  as right_is_fmin_partial,
 |  | 
 | 
											
												
													
														|  | -       FL2.fmax             as right_fmax,
 |  | 
 | 
											
												
													
														|  | -       FL2.is_fmax_partial  as right_is_fmax_partial,
 |  | 
 | 
											
												
													
														|  | -       FL2.strand           as right_strand,
 |  | 
 | 
											
												
													
														|  | -       FL2.phase            as right_phase,
 |  | 
 | 
											
												
													
														|  | -       FL2.locgroup         as right_locgroup,
 |  | 
 | 
											
												
													
														|  | -       FL2.rank             as right_rank
 |  | 
 | 
											
												
													
														|  | -     FROM {feature} F1
 |  | 
 | 
											
												
													
														|  | -       INNER JOIN {featureloc} FL1 on FL1.srcfeature_id = F1.feature_id
 |  | 
 | 
											
												
													
														|  | -       INNER JOIN {feature} F2 on FL1.feature_id = F2.feature_id
 |  | 
 | 
											
												
													
														|  | -       INNER JOIN {featureloc} FL2 on FL2.feature_id = F2.feature_id
 |  | 
 | 
											
												
													
														|  | -       INNER JOIN {cvterm} CVT2 on F2.type_id = CVT2.cvterm_id
 |  | 
 | 
											
												
													
														|  | -     WHERE
 |  | 
 | 
											
												
													
														|  | -       F1.feature_id = :feature_id  AND
 |  | 
 | 
											
												
													
														|  | -       (CVT2.name = 'match' or CVT2.name like '%_match')
 |  | 
 | 
											
												
													
														|  | -     ORDER BY FL1.fmin
 |  | 
 | 
											
												
													
														|  | -   ";
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -   $results = chado_query($sql, array(':feature_id' => $feature->feature_id));
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -   // iterate through the results and add them to our featurelocs array
 |  | 
 | 
											
												
													
														|  | -   $featurelocs = array();
 |  | 
 | 
											
												
													
														|  | -   while ($fl = $results->fetchObject()) {
 |  | 
 | 
											
												
													
														|  | -     // ignore featurelocs where the left and right srcfeature is the same
 |  | 
 | 
											
												
													
														|  | -     if (strcmp($fl->left_srcfeature_id, $fl->right_srcfeature_id) == 0) {
 |  | 
 | 
											
												
													
														|  | -       continue;
 |  | 
 | 
											
												
													
														|  | 
 |  | +   * The feature provided to the function will always be the feature 1.  The
 | 
											
												
													
														|  | 
 |  | +   * featureloc columns prefixed with 'right' (e.g. right_fmin) belong to the
 | 
											
												
													
														|  | 
 |  | +   * alignment of feature 3 with feature 2
 | 
											
												
													
														|  | 
 |  | +   *
 | 
											
												
													
														|  | 
 |  | +   * Features may align to more than one feature and are not matches. We do
 | 
											
												
													
														|  | 
 |  | +     * not want to include these, so we have to filter on the SO terms:
 | 
											
												
													
														|  | 
 |  | +     * match, or %_match
 | 
											
												
													
														|  | 
 |  | +     *
 | 
											
												
													
														|  | 
 |  | +     * @ingroup tripal_feature
 | 
											
												
													
														|  | 
 |  | +     */
 | 
											
												
													
														|  | 
 |  | +   private  function get_matched_alignments($feature) {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +     $sql = "
 | 
											
												
													
														|  | 
 |  | +       SELECT
 | 
											
												
													
														|  | 
 |  | +         FL1.featureloc_id    as left_featureloc_id,
 | 
											
												
													
														|  | 
 |  | +         FL1.srcfeature_id    as left_srcfeature_id,
 | 
											
												
													
														|  | 
 |  | +         FL1.feature_id       as left_feature_id,
 | 
											
												
													
														|  | 
 |  | +         FL1.fmin             as left_fmin,
 | 
											
												
													
														|  | 
 |  | +         FL1.is_fmin_partial  as left_is_fmin_partial,
 | 
											
												
													
														|  | 
 |  | +         FL1.fmax             as left_fmax,
 | 
											
												
													
														|  | 
 |  | +         FL1.is_fmax_partial  as left_is_fmax_partial,
 | 
											
												
													
														|  | 
 |  | +         FL1.strand           as left_strand,
 | 
											
												
													
														|  | 
 |  | +         FL1.phase            as left_phase,
 | 
											
												
													
														|  | 
 |  | +         FL1.locgroup         as left_locgroup,
 | 
											
												
													
														|  | 
 |  | +         FL1.rank             as left_rank,
 | 
											
												
													
														|  | 
 |  | +         FL2.featureloc_id    as right_featureloc_id,
 | 
											
												
													
														|  | 
 |  | +         FL2.srcfeature_id    as right_srcfeature_id,
 | 
											
												
													
														|  | 
 |  | +         FL2.feature_id       as right_feature_id,
 | 
											
												
													
														|  | 
 |  | +         FL2.fmin             as right_fmin,
 | 
											
												
													
														|  | 
 |  | +         FL2.is_fmin_partial  as right_is_fmin_partial,
 | 
											
												
													
														|  | 
 |  | +         FL2.fmax             as right_fmax,
 | 
											
												
													
														|  | 
 |  | +         FL2.is_fmax_partial  as right_is_fmax_partial,
 | 
											
												
													
														|  | 
 |  | +         FL2.strand           as right_strand,
 | 
											
												
													
														|  | 
 |  | +         FL2.phase            as right_phase,
 | 
											
												
													
														|  | 
 |  | +         FL2.locgroup         as right_locgroup,
 | 
											
												
													
														|  | 
 |  | +         FL2.rank             as right_rank
 | 
											
												
													
														|  | 
 |  | +       FROM {feature} F1
 | 
											
												
													
														|  | 
 |  | +         INNER JOIN {featureloc} FL1 on FL1.srcfeature_id = F1.feature_id
 | 
											
												
													
														|  | 
 |  | +         INNER JOIN {feature} F2 on FL1.feature_id = F2.feature_id
 | 
											
												
													
														|  | 
 |  | +         INNER JOIN {featureloc} FL2 on FL2.feature_id = F2.feature_id
 | 
											
												
													
														|  | 
 |  | +         INNER JOIN {cvterm} CVT2 on F2.type_id = CVT2.cvterm_id
 | 
											
												
													
														|  | 
 |  | +       WHERE
 | 
											
												
													
														|  | 
 |  | +         F1.feature_id = :feature_id  AND
 | 
											
												
													
														|  | 
 |  | +         (CVT2.name = 'match' or CVT2.name like '%_match')
 | 
											
												
													
														|  | 
 |  | +       ORDER BY FL1.fmin
 | 
											
												
													
														|  | 
 |  | +     ";
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +     $results = chado_query($sql, array(':feature_id' => $feature->feature_id));
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +     // iterate through the results and add them to our featurelocs array
 | 
											
												
													
														|  | 
 |  | +     $featurelocs = array();
 | 
											
												
													
														|  | 
 |  | +     while ($fl = $results->fetchObject()) {
 | 
											
												
													
														|  | 
 |  | +       // ignore featurelocs where the left and right srcfeature is the same
 | 
											
												
													
														|  | 
 |  | +       if (strcmp($fl->left_srcfeature_id, $fl->right_srcfeature_id) == 0) {
 | 
											
												
													
														|  | 
 |  | +         continue;
 | 
											
												
													
														|  | 
 |  | +       }
 | 
											
												
													
														|  | 
 |  | +       $featurelocs[] = $fl ;
 | 
											
												
													
														|  |       }
 |  |       }
 | 
											
												
													
														|  | -     $featurelocs[] = $fl ;
 |  | 
 | 
											
												
													
														|  | 
 |  | +     return $featurelocs;
 | 
											
												
													
														|  |     }
 |  |     }
 | 
											
												
													
														|  | -   return $featurelocs;
 |  | 
 | 
											
												
													
														|  | - }
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -/**
 |  | 
 | 
											
												
													
														|  | - * Implements hook_ws_formatter().
 |  | 
 | 
											
												
													
														|  | - */
 |  | 
 | 
											
												
													
														|  | -function chado_linker__featureloc_ws_formatter(&$element, $entity_type, $entity,
 |  | 
 | 
											
												
													
														|  | -    $field, $instance, $items) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +  /**
 | 
											
												
													
														|  | 
 |  | +   * @see TripalField::widget_form()
 | 
											
												
													
														|  | 
 |  | +   */
 | 
											
												
													
														|  | 
 |  | +  function widget_form(&$widget, $form, $form_state, $field, $instance, $langcode, $items, $delta, $element) {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | 
 |  | +  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  |  /**
 |  |  /**
 | 
											
												
													
														|  | - *  Implements hook_widget().
 |  | 
 | 
											
												
													
														|  | 
 |  | + * Callback function for validating the chado_linker_featureloc_widget.
 | 
											
												
													
														|  |   */
 |  |   */
 | 
											
												
													
														|  | -function chado_linker__featureloc_widget(&$widget, $form, $form_state, $field, $instance, $langcode, $items, $delta, $element) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +function chado_linker__featureloc_widget_validate($element, &$form_state) {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  /**
 |  |  /**
 | 
											
												
													
														|  | - * Callback function for validating the chado_linker_featureloc_widget.
 |  | 
 | 
											
												
													
														|  | 
 |  | + * Validation function for the chado_linker_featureloc_formatter_settings_form.
 | 
											
												
													
														|  |   */
 |  |   */
 | 
											
												
													
														|  | -function chado_linker__featureloc_widget_validate($element, &$form_state) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +function chado_linker__featureloc_formatter_settings_form_validate(&$form, &$form_state) {
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +  // Place here as an example for validating the settings form.
 | 
											
												
													
														|  | 
 |  | +}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -}
 |  | 
 |