Explorar el Código

Add new page integration module.

Lacey Sanderson hace 5 años
padre
commit
535d5bfbd6

+ 2 - 3
tripal_jbrowse/tripal_jbrowse.info

@@ -1,7 +1,6 @@
-name = Tripal-JBrowse Integration
-description = Integrates existing JBrowse instances into Tripal sites.
+name = JBrowse Nodes DEPRECATED
+description = Creates nodes embedding JBrowse instances.
 core = 7.x
 package = Tripal Extensions
 
-dependencies[] = link
 dependencies[] = tripal

+ 31 - 0
tripal_jbrowse_page/includes/tripal_jbrowse_page.api.inc

@@ -0,0 +1,31 @@
+<?php
+/**
+ * @file
+ * Contains Application Programmer Interface (API) functions for this module.
+ */
+
+/**
+ * Retrieve the instance id based on the organism.
+ */
+function tripal_jbrowse_page_get_instance_id($conditions, $options) {
+
+  // First retrieve the organism_id.
+  $organism_id = chado_query('SELECT organism_id FROM {organism} WHERE genus=:genus AND species=:species',
+    [
+      ':genus' => $conditions['genus'],
+      ':species' => $conditions['species']
+    ])->fetchField();
+
+  // Then retrieve the instance for that organism.
+  if ($options['load_instance']) {
+    $instances = tripal_jbrowse_mgmt_get_instances(['organism_id' => $organism_id]);
+    return $instances[0];
+  }
+  else {
+    return db_select('tripal_jbrowse_mgmt_instances', 'I')
+      ->fields('I', ['id'])
+      ->condition('organism_id', $organism_id)
+      ->execute()->fetchField();
+  }
+
+}

+ 26 - 0
tripal_jbrowse_page/includes/tripal_jbrowse_page.listing.inc

@@ -0,0 +1,26 @@
+<?php
+/**
+ * @file
+ * Builds the public jbrowse listing.
+ */
+
+/**
+ * Builds the public jbrowse listing.
+ */
+function tripal_jbrowse_page_listing_page() {
+  $settings = tripal_jbrowse_mgmt_get_settings();
+
+  // Retrieve all the instances...
+  $instances = tripal_jbrowse_mgmt_get_instances();
+
+  drupal_add_css(drupal_get_path('module', 'tripal_jbrowse_page') . '/theme/tripal_jbrowse_page.css');
+  
+  // Add the URL for each to link to.
+  foreach($instances as $k => $instance) {
+    $q = tripal_jbrowse_mgmt_build_http_query($instance);
+    $instances[$k]->url = url($settings['link'], ['query' => $q, 'absolute' => TRUE]);
+  }
+
+  // Use the template to render the page.
+  return theme('jbrowse_instance_public_listing', ['instances' => $instances]);
+}

+ 14 - 0
tripal_jbrowse_page/theme/jbrowse-instance--public-listing.tpl.php

@@ -0,0 +1,14 @@
+<p>The JBrowse genome browser allows you to visually explore genomes and their associated large-scale datasets. JBrowse is a widely used application that is fast, intuitive, and compatible with most web browsers.</p>
+
+<div class="jbrowse-list">
+
+  <?php foreach ($instances as $instance) { ?>
+
+    <div class="jbrowse-instance">
+      <h3><?php print l($instance->title, $instance->url); ?></h3>
+      <p><?php print $instance->description; ?></p>
+      <span class="jbrowse-launch-link"><?php print l('Launch JBrowse', $instance->url); ?></span>
+    </div>
+
+  <?php } ?>
+</div>

+ 12 - 0
tripal_jbrowse_page/theme/tripal_jbrowse_page.css

@@ -0,0 +1,12 @@
+.jbrowse-list {
+  border-top: 1px solid #d0d0d0;
+  margin-top: 20px;
+}
+.jbrowse-list .jbrowse-instance {
+  border-bottom: 1px solid #d0d0d0;
+  margin-bottom: 20px;
+  padding-bottom: 30px;
+}
+.jbrowse-list .jbrowse-instance .jbrowse-launch-link {
+  float: right;
+}

+ 7 - 0
tripal_jbrowse_page/tripal_jbrowse_page.info

@@ -0,0 +1,7 @@
+name = Tripal-JBrowse Page Integration
+description = Integrates JBrowse instances into Tripal Pages.
+core = 7.x
+package = Tripal Extensions
+
+dependencies[] = tripal
+dependencies[] = tripal_jbrowse_mgmt

+ 75 - 0
tripal_jbrowse_page/tripal_jbrowse_page.module

@@ -0,0 +1,75 @@
+<?php
+
+// API.
+require_once 'includes/tripal_jbrowse_page.api.inc';
+
+// Include files.
+require_once 'includes/tripal_jbrowse_page.listing.inc';
+
+/**
+ * Implements hook_menu().
+ */
+function tripal_jbrowse_page_menu() {
+  $items = [];
+
+  $items['jbrowse'] = [
+    'title' => 'JBrowse',
+    'description' => 'A listing of available JBrowse instances.',
+    'page callback' => 'tripal_jbrowse_page_listing_page',
+    'access arguments' => ['access content'],
+    'type' => MENU_NORMAL_ITEM,
+  ];
+
+  $instances = tripal_jbrowse_mgmt_get_instances();
+  foreach ($instances as $instance) {
+
+    $path = 'jbrowse/'.$instance->organism->genus . '/' . $instance->organism->species;
+    $items[$path] = [
+      'title' => $instance->title,
+      'description' => $instance->description,
+      'page callback' => 'tripal_jbrowse_page_page',
+      'page arguments' => [1, 2],
+      'access arguments' => ['access content'],
+      'type' => MENU_NORMAL_ITEM,
+    ];
+  }
+
+  return $items;
+}
+
+/**
+ * Implements hook_theme().
+ */
+function tripal_jbrowse_page_theme($existing, $type, $theme, $path) {
+
+  $items = array(
+    'jbrowse_instance_public_listing' => array(
+      // Don't specify the path in the template name.
+      // Unless you have your template inside a directory within this module.
+      'template' =>  'theme/jbrowse-instance--public-listing',
+      'variables' => array('instances' => []),
+    ),
+  );
+
+  return $items;
+}
+
+/**
+ * Redirect to the JBrowse Instance.
+ */
+function tripal_jbrowse_page_page($genus, $species) {
+
+  $instance = tripal_jbrowse_page_get_instance_id([
+    'genus' => $genus,
+    'species' => $species
+  ],
+  ['load_instance' => TRUE]);
+
+  $query_params = tripal_jbrowse_mgmt_build_http_query($instance);
+  $settings = tripal_jbrowse_mgmt_get_settings();
+
+  $url = url($settings['link'],['query' => $query_params]);
+  drupal_goto($url, array('external' => TRUE));
+
+  return '';
+}