'local', // The name of the term. 'term_name' => 'Gbrowse Image', // The unique ID (i.e. accession) of the term. 'term_accession' => 'gbrowse_image', // Set to TRUE if the site admin is allowed to change the term // type. This will create form elements when editing the field instance // to allow the site admin to change the term settings above. 'term_fixed' => FALSE, // The URL for the GBrowse image 'gbrowse_url' => '', ); // The default widget for this field. public static $default_widget = 'local__gbrowse_image_widget'; // The default formatter for this field. public static $default_formatter = 'local__gbrowse_image_formatter'; /** * @see TripalField::elementInfo() */ public function elementInfo() { $field_term = $this->getFieldTermID(); return array( $field_term => array( 'sortable' => FALSE, 'searchable' => FALSE, 'type' => 'xs:string', 'readonly' => TRUE, ), ); } /** * @see TripalField::load() */ public function load($entity) { $field_name = $this->field['field_name']; $feature = $entity->chado_record; $record = $entity->chado_record; $settings = $this->instance['settings']; // Set some defauls for the empty record $entity->{$field_name}['und'][0] = array( 'value' => '', ); // If we don't have a record then just return if (!$record) { return; } // Replace any tokens in the string. $gbrowse_url = NULL; $g_urls = $settings['gbrowse_url']; $g_urls = explode("\n", $g_urls); foreach ($g_urls as $g_url) { $matches = []; if (preg_match('/^(.*)\s+(.*)\s+(http.*)$/', $g_url, $matches)) { if ($record->organism_id->genus == $matches[1] and $record->organism_id->species == $matches[2]) { $gbrowse_url = $matches[3]; } } elseif (preg_match('/^http.*$/', $g_url)) { $gbrowse_url = $g_url; } } if (!$gbrowse_url) { return; } $bundle = tripal_load_bundle_entity(['name' => $this->instance['bundle']]); $gbrowse_url = tripal_replace_entity_tokens($gbrowse_url, $entity, $bundle); // Use the term associated to the db.url table of Chado. $url_term = chado_get_semweb_term('db', 'url'); // Add the URL to the values $entity->{$field_name}['und'][0]['value'] = [ $url_term => $gbrowse_url ]; } /** * @see TripalField::globalSettingsForm() */ public function instanceSettingsForm() { $element = parent::instanceSettingsForm(); $settings = $this->instance['settings']; $element['gbrowse_url'] = array( '#type' => 'textarea', '#title' => 'GBrowse URL', '#description' => t('Please enter the URL for generating feature ' . 'images on the remote GBrowse site. You may use tokens to substitute ' . 'field values from this content type. Open the "Available Tokens" fieldset below. ' . 'For example, to show a view of a gene from the rice genome GBrowse the ' . 'following URL with tokens can be used: ' . 'http://rice.plantbiology.msu.edu/cgi-bin/gbrowse_img/rice/?name=[schema__name];type=Landmarks%3Aregion+Genes+Rice_Annotation' . '. If you need to specify different GBrowse URLs for different ' . 'species, put the genus, species and URL all on one line with each separated ' . 'by a space. For example: ' . '"Oryza sativa http://rice.plantbiology.msu.edu/cgi-bin/gbrowse_img/rice/?name=[schema__name];type=Landmarks%3Aregion+Genes+Rice_Annotation"'), '#default_value' => $settings['gbrowse_url'], ); $element['tokens'] = array( '#type' => 'fieldset', '#collapsed' => TRUE, '#collapsible' => TRUE, '#title' => 'Available Tokens' ); $headers = array('Token', 'Description'); $rows = array(); // Get the bundle tokens $bundle = tripal_load_bundle_entity(['name' => $this->instance['bundle']]); $tokens = tripal_get_entity_tokens($bundle); foreach ($tokens as $token) { $rows[] = array( $token['token'], $token['description'], ); } $table_vars = array( 'header' => $headers, 'rows' => $rows, 'attributes' => array(), 'sticky' => FALSE, 'caption' => '', 'colgroups' => array(), 'empty' => 'There are no tokens', ); $element['tokens']['list'] = array( '#type' => 'item', '#markup' => theme_table($table_vars), ); return $element; } }