class tripal_views_handler_field_sequence
- 2.x tripal_views/views/handlers/tripal_views_handler_field_sequence.inc tripal_views_handler_field_sequence
- 3.x tripal_chado_views/views/handlers/tripal_views_handler_field_sequence.inc tripal_views_handler_field_sequence
- 1.x tripal_views/views/handlers/tripal_views_handler_field_sequence.inc tripal_views_handler_field_sequence
Handles display of sequence data. If will aggregate sequences that need to be aggregated (e.g. coding sequences) and provide
Hierarchy
- class \views_object
- class \views_handler
- class \views_handler_field
- class \views_handler
Expanded class hierarchy of tripal_views_handler_field_sequence
Related topics
File
- tripal_views/
views/ handlers/ tripal_views_handler_field_sequence.inc, line 13 - Contains tripal_views_handler_field_sequence
View source
class tripal_views_handler_field_sequence extends views_handler_field {
/**
* {@inheritdoc}
*/
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
$form['display'] = array(
'#type' => 'fieldset',
'#title' => 'Format Output',
'#description' => t('Alter the way a sequence is displayed')
);
$default_num_bases_per_line = '50';
if ($this->options['display']['num_bases_per_line']) {
$default_num_bases_per_line = $this->options['display']['num_bases_per_line'];
}
$default_output_format = 'raw';
if ($this->options['display']['output_format']) {
$default_ouput_format = $this->options['display']['output_format'];
}
$form['display']['num_bases_per_line'] = array(
'#type' => 'textfield',
'#title' => t('Number of bases per line'),
'#description' => t('Specify the number of bases per line. An HTML <br> tag ' .
'will be inserted after the number of bases indicated. If no value is ' .
'provided. The sequence will be one long string (default)'),
'#default_value' => $default_num_bases_per_line,
);
$form['display']['derive_from_parent'] = array(
'#type' => 'checkbox',
'#title' => t('Derive sequence from parent'),
'#description' => t('Rather than use the sequence from the \'residues\' of this feature, you may ' .
'derive the sequence from the parent features to which it is aligned. This is useful in the case that the feature ' .
'does not have sequence associated with it and we need to get it through it\'s alignment. ' .
'Note: this will slow queries with large numbers of results on the page.'),
'#default_value' => $this->options['display']['derive_from_parent'],
);
$form['display']['aggregate'] = array(
'#type' => 'checkbox',
'#title' => t('Aggregate sub features'),
'#description' => t('If the feature has sub features (e.g. CDS of an mRNA) then check this ' .
'box to filter the sequence to only include the sub features. Gaps between sub features will be ' .
'excluded from the sequence. This is useful for obtaining a complete CDS from an mRNA ' .
'without intronic sequence'),
'#default_value' => $this->options['display']['aggregate'],
);
$form['display']['output_format'] = array(
'#type' => 'radios',
'#title' => t('Output format'),
'#options' => array(
'raw' => 'Raw sequence data (no formatting)',
'fasta_html' => 'FASTA in HTML format',
'fasta_txt' => 'FASTA in text format',
),
'#description' => t('Choose an output format. Raw output cannot be used when the sequence is derived from the parent.'),
'#default_value' => $default_ouput_format,
);
}
/**
* {@inheritdoc}
*/
function query() {
parent::query();
// if we are going to get the sequence from the parent then
// we will need to do more queries in the render function
// and we must have the feature_id to do those
if ($this->options['display']['derive_from_parent']) {
$this->ensure_my_table();
$this->query->add_field($this->table, 'feature_id');
$this->query->add_field($this->table, 'name');
}
}
/**
* {@inheritdoc}
*
* Prior to display of results we want to format the sequence
*/
function render($values) {
$residues = '';
// get the number of bases to show per line
$num_bases_per_line = $this->options['display']['num_bases_per_line'];
$output_format = $this->options['display']['output_format'];
// get the residues from the feature.residues column
$field = $this->field_alias;
// get the feature id
$feature_id = $values->feature_feature_id;
$feature_name = $values->feature_name;
// the upstream and downstream values get set by the
// tripal_views_handlers_filter_sequence.inc
$upstream = $_SESSION['upstream'];
$downstream = $_SESSION['downstream'];
if (!$upstream) {
$upstream = 0;
}
if (!$downstream) {
$downstream = 0;
}
$derive_from_parent = $this->options['display']['derive_from_parent'];
$aggregate = $this->options['display']['aggregate'];
$residues = tripal_feature_get_formatted_sequence($feature_id, $feature_name,
$num_bases_per_line, $derive_from_parent, $aggregate, $output_format,
$upstream, $downstream);
/*
// if we need to get the sequence from the parent but there is no aggregation
// then do so now.
if ($this->options['display']['derive_from_parent']) {
// execute our prepared statement
if (tripal_core_is_sql_prepared('sequence_by_parent')) {
$sql = "EXECUTE sequence_by_parent (%d, %d, %d)";
$parents = chado_query($sql, $upstream, $downstream, $feature_id);
}
while ($parent = d-b_f-etch_object($parents)) {
$seq = ''; // initialize the sequence for each parent
// if we are to aggregate then we will ignore the feature returned
// by the query above and rebuild it using the sub features
if ($this->options['display']['aggregate']){
// now get the sub features that are located on the parent.
$sql = "EXECUTE sub_features (%d, %d)";
$children = chado_query($sql, $feature_id, $parent->srcfeature_id);
$sql = "EXECUTE count_sub_features (%d, %d)";
$num_children = d-b_f-etch_object(chado_query($sql, $feature_id, $parent->srcfeature_id));
// iterate through the sub features and concat their sequences. They
// should already be in order.
$types = array();
$i = 0;
while($child = d-b_f-etch_object($children)) {
// keep up with the types
if (!in_array($child->type_name,$types)) {
$types[] = $child->type_name;
}
$sql = "EXECUTE sequence_by_parent (%d, %d, %d)";
// if the first sub feature we need to include the upstream bases
if ($i == 0 and $parent->strand >= 0) {
// -------------------------- ref
// ....----> ---->
// up 1 2
$q = chado_query($sql, $upstream, 0, $child->feature_id);
}
elseif ($i == 0 and $parent->strand < 0) {
// -------------------------- ref
// ....<---- <----
// down 1 2
$q = chado_query($sql, 0, $downstream, $child->feature_id);
}
// if the last sub feature we need to include the downstream bases
elseif ($i == $num_children->num_children - 1 and $parent->strand >= 0) {
// -------------------------- ref
// ----> ---->....
// 1 2 down
$q = chado_query($sql, 0, $downstream, $child->feature_id);
}
elseif ($i == $num_children->num_children - 1 and $parent->strand < 0) {
// -------------------------- ref
// <---- <----....
// 1 2 up
$q = chado_query($sql, $upstream, 0, $child->feature_id);
}
// for internal sub features we don't want upstream or downstream bases
else {
$sql = "EXECUTE sequence_by_parent (%d, %d, %d)";
$q = chado_query($sql, 0, 0, $child->feature_id);
}
while ($subseq = d-b_f-etch_object($q)){
// concatenate the sequences of all the sub features
if($subseq->srcfeature_id == $parent->srcfeature_id){
$seq .= $subseq->residues;
}
}
$i++;
}
}
// if this isn't an aggregate then use the parent residues
else {
$seq = $parent->residues;
}
// get the reverse compliment if feature is on the reverse strand
$dir = 'forward';
if ($parent->strand < 0) {
$seq = trpial_feature_reverse_complement($seq);
$dir = 'reverse';
}
// now format for display
if ($output_format == 'fasta_html') {
$seq = wordwrap($seq, $num_bases_per_line, "<br>", TRUE);
}
elseif ($output_format == 'fasta_txt') {
$seq = wordwrap($seq, $num_bases_per_line, "\n", TRUE);
}
$residues .= ">$feature_name ($parent->typename) $parent->srcname:" . ($parent->adjfmin + 1) . ".." . $parent->adjfmax ." ($dir). ";
if (count($types) > 0) {
$residues .= "Excludes all bases but those of type(s): " . implode(', ',$types) . ". " ;
}
if ($parent->upstream > 0) {
$residues .= "Includes " . $parent->upstream . " bases upstream. ";
}
if ($parent->downstream > 0) {
$residues .= "Includes " . $parent->downstream . " bases downstream. ";
}
if (!$seq) {
$residues .= "No sequence available\n<br>";
}
else {
if ($output_format == 'fasta_html') {
$residues .= "<br>";
}
$residues .= "\n" . $seq . "\n";
if ($output_format == 'fasta_html') {
$residues .= "<br>";
}
}
}
}
// if we are not getting the sequence from the parent sequence then
// use what comes through from the feature record
else {
$residues = $values->$field;
if ($output_format == 'fasta_html') {
$residues = wordwrap($residues, $num_bases_per_line, "<br>", TRUE);
}
elseif ($output_format == 'fasta_txt') {
$residues = wordwrap($residues, $num_bases_per_line, "\n", TRUE);
}
}
// format the residues for display
if($residues and $num_bases_per_line){
if ($output_format == 'fasta_html') {
$residues = '<span style="font-family: monospace;">' . $residues . '</span>';
}
} */
return $residues;
}
}
Members
Name![]() |
Modifiers | Type | Description |
---|---|---|---|
tripal_views_handler_field_sequence:: |
function |
Default options form that provides the label widget that all fields
should have. Overrides views_handler_field:: |
|
tripal_views_handler_field_sequence:: |
function |
Called to add the field to a query. Overrides views_handler_field:: |
|
tripal_views_handler_field_sequence:: |
function |
Prior to display of results we want to format the sequence Overrides views_handler_field:: |
|
views_handler:: |
public | property | The alias of the table of this handler which is used in the query. |
views_handler:: |
function | Take input from exposed handlers and assign to this handler, if necessary. | |
views_handler:: |
function | Check whether current user has access to this handler. | |
views_handler:: |
function | Determine if the handler is considered 'broken', meaning it's a a placeholder used when a handler can't be found. | |
views_handler:: |
function | Determine if a handler can be exposed. | |
views_handler:: |
function | Transform a string by a certain method. | |
views_handler:: |
function | Ensure the main table for this handler is in the query. This is used a lot. | |
views_handler:: |
function | Render our chunk of the exposed handler form when selecting | |
views_handler:: |
function | Get information about the exposed form for the form renderer. | |
views_handler:: |
function | Submit the exposed handler form | |
views_handler:: |
function | Validate the exposed handler form | |
views_handler:: |
function | Form for exposed handler options. | |
views_handler:: |
function | Set new exposed option defaults when exposed setting is flipped on. | |
views_handler:: |
function | Perform any necessary changes to the form exposes prior to storage. There is no need for this function to actually store the data. | |
views_handler:: |
function | Validate the options form. | |
views_handler:: |
function | Provide defaults for the handler. | |
views_handler:: |
function | Provide a form for setting options. | |
views_handler:: |
function | Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data. | |
views_handler:: |
function | Validate the options form. | |
views_handler:: |
function | Shortcut to get a handler's raw field value. | |
views_handler:: |
function | Get the join object that should be used for this handler. | |
views_handler:: |
function | Provide a form for aggregation settings. | |
views_handler:: |
function | Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data. | |
views_handler:: |
function | If a handler has 'extra options' it will get a little settings widget and another form called extra_options. | |
views_handler:: |
function | Returns TRUE if the exposed filter works like a grouped filter. | |
views_handler:: |
function | Determine if this item is 'exposed', meaning it provides form elements to let users modify the view. | |
views_handler:: |
function | Define if the exposed input has to be submitted multiple times. This is TRUE when exposed filters grouped are using checkboxes as widgets. | |
views_handler:: |
function | Determine if the argument needs a style plugin. | |
views_handler:: |
function | Validate the options form. | |
views_handler:: |
function | Provides a unique placeholders for handlers. | |
views_handler:: |
function | Run after the view is executed, before the result is cached. | |
views_handler:: |
function | Run before the view is built. | |
views_handler:: |
function | Sanitize the value for output. | |
views_handler:: |
function | Called just prior to query(), this lets a handler set up any relationship it needs. | |
views_handler:: |
function | Shortcut to display the expose/hide button. | |
views_handler:: |
function | Shortcut to display the exposed options form. | |
views_handler:: |
function | If set to remember exposed input in the session, store it there. | |
views_handler:: |
function | Provides the handler some groupby. | |
views_handler:: |
function | Validates the handler against the complete View. | |
views_handler_field:: |
public | property | The field value prior to any rewriting. |
views_handler_field:: |
function | Add 'additional' fields to the query. | |
views_handler_field:: |
function | Add any special tokens this field might use for itself. | |
views_handler_field:: |
function |
Provide extra data to the administration form Overrides views_handler:: |
|
views_handler_field:: |
function | Render a field using advanced settings. | |
views_handler_field:: |
function | Determine if this field can allow advanced rendering. | |
views_handler_field:: |
function | Called to determine what to tell the clicksorter. | |
views_handler_field:: |
function | Determine if this field is click sortable. | |
views_handler_field:: |
function |
Construct a new field handler. Overrides views_object:: |
|
views_handler_field:: |
function | Document any special tokens this field might use for itself. | |
views_handler_field:: |
function | Return the class of the field. | |
views_handler_field:: |
function | Return the class of the field's label. | |
views_handler_field:: |
function | Return an HTML element for the label based upon the field's element type. | |
views_handler_field:: |
function | Return an HTML element based upon the field's element type. | |
views_handler_field:: |
function | Return the class of the field's wrapper. | |
views_handler_field:: |
function | Return an HTML element for the wrapper based upon the field's element type. | |
views_handler_field:: |
function | Provide a list of elements valid for field HTML. | |
views_handler_field:: |
function | Get the 'render' tokens to use for advanced rendering. | |
views_handler_field:: |
function | Recursive function to add replacements for nested query string parameters. | |
views_handler_field:: |
function | Get the value that's supposed to be rendered. | |
views_handler_field:: |
function |
init the handler with necessary data. Overrides views_handler:: |
|
views_handler_field:: |
function | Checks if a field value is empty. | |
views_handler_field:: |
function | Get this field's label. | |
views_handler_field:: |
function |
Performs some cleanup tasks on the options array before saving it. Overrides views_handler:: |
|
views_handler_field:: |
function |
Information about options for all kinds of purposes will be held here.
@code
'option_name' => array( Overrides views_handler:: |
|
views_handler_field:: |
function | Run before any fields are rendered. | |
views_handler_field:: |
function | Render this field as altered text, from a fieldset set by the user. | |
views_handler_field:: |
function | Render this field as a link, with the info from a fieldset set by the user. | |
views_handler_field:: |
function | Perform an advanced text render for the item. | |
views_handler_field:: |
function | Trim the field down to the specified length. | |
views_handler_field:: |
function | Call out to the theme() function, which probably just calls render() but allows sites to override output fairly easily. | |
views_handler_field:: |
function | ||
views_handler_field:: |
function | Replace a value with tokens from the last field. | |
views_handler_field:: |
function |
Return a string representing this handler's name in the UI. Overrides views_handler:: |
|
views_handler_field:: |
function | Determines if this field will be available as an option to group the result by in the style settings. | |
views_object:: |
function | ||
views_object:: |
function | ||
views_object:: |
function | ||
views_object:: |
function | Always exports the option, regardless of the default value. | |
views_object:: |
function | Set default options on this object. Called by the constructor in a complex chain to deal with backward compatibility. | |
views_object:: |
function | Set default options. For backward compatibility, it sends the options array; this is a feature that will likely disappear at some point. | |
views_object:: |
function | Let the handler know what its full definition is. | |
views_object:: |
function | Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away. | |
views_object:: |
function | Unpack a single option definition. | |
views_object:: |
function | Unpacks each handler to store translatable texts. | |
views_object:: |
function |