Browse Source

Updated README and fixes to TripalFieldQuery class

Stephen Ficklin 8 years ago
parent
commit
c8bddbea71

+ 0 - 92
README.txt

@@ -1,92 +0,0 @@
-What is Tripal?
---------------
-Tripal is a collection of open-source freely available Drupal modules 
-and is a member of the GMOD family of tools. Tripal serves as a web 
-interface for the GMOD Chado database and is designed to reduce the
-time and cost required for construction of an online genomic, genetic
-and breeding database.
-
-
-Features
---------------
- - a Chado installer
- - Data loaders for ontologies (controlled vocabularies), GFF files, 
-   and FASTA files, publications (from PubMed and AGIRCOLA). 
- - Generic Bulk Data Loader Modules allows for creation of custom 
-   loading templates.
- - Drupal nodes (web pages) are automatically generated for organisms,
-   genomic features, biological libraries, and stocks
- - Supports creation of materialized views for faster data queries.
- - Display templates are provided for all content types for
-   easier customization.
- - Views Integration allows for custom listings of data
- - Content pieces exposed as blocks allowing the use of Panels for 
-   custom layouts of Tripal Nodes
-
-
-Required Modules
---------------
- - Drupal 7.x 
- - Drupal Core Modules: Search, Path and PHP modules.
- - Drupal contributed modules: Views
- - Database containing GMOD Chado Schema (can be installed by the 
-   Tripal Core module)
-   
-NOTE: A PostgreSQL database is required for installation of the 
-Chado Schema
-
-Installation
---------------
-Please follow the instructions in the online Tripal User's Guide:
-http://tripal.info/tutorials/v2.0/installation
-
-
-Upgrade from Tripal v2.x to v3.x
----------------------------------
-Note:  Upgrade can only be performed using 'drush' command.
-
-Note: Deprecated API functions from Tripal v1.x have been removed from Tripal
-v3.  Therefore, use of deprecated API functions in templates or custom 
-modules may cause a white screen of death (WSOD).  Check teh server logs if this
-occurs to find where deprecated functions may be used.
-
-Upgrade Instructions:
-
-Step 1: Put the site in maintenance mode.
-
-Step 2: Disable tripal modules. Disabling the core module will disable all
-other Tripal modules:
-
-  drush pm-disable tripal_core
-  
-Step 3: Remove old Tripal v2 package and replace with Tripal v3 package
-Step 4: Enable the tripal module
-
-  drush pm-enable tripal
- 
-Step 5: Enable the tripal_chado module  
-
-  drush pm-enable tripal_chado
-  
-Step 6:  Tripal v2 modules are now called 'legacy modules'. these are the
-modules that were disabled in step #2.  For backwards compatibility, you 
-should re-enable these modules:
-
-  drush pm-enable tripal_core, tripal_views, tripal_db, tripal_cv, \
-    tripal_analysis, tripal_organism, tripal_feature, tripal_pub, \
-    tripal_stock
-
-Be sure to enable any additional modules not included in the example
-drush command above.
-
-Step 7:  Return to your Tripal site, and click the link that appears for
-preparing Chado and launch the job.
-
-
-Customization
---------------
-Tripal can be used “as is” but also allows for complete customization.
-PHP-based template files are provided for all data types to allow for 
-precise customizations as required by the community. A well-developed 
-Tripal API provides a uniform set of variables and functions for 
-accessing any and all data within the Chado database.

+ 41 - 45
tripal/includes/TripalFieldQuery.inc

@@ -10,16 +10,7 @@
  */
 class TripalFieldQuery {
 
-
-  // A list of the field storage instances for the fields in the filter.
-  protected $field_storage = array();
-  // The order in which the field storage execute() function should be
-  // called.
-  protected $fs_order = array();
-  // An associative array of the filters to apply.
-  protected $conditions = array();
-  // An associative array of the sorting.
-  protected $order = array();
+  protected $options = array();
 
   /**
    *
@@ -47,48 +38,43 @@ class TripalFieldQuery {
 
     if ($field) {
       $field_storage_type = $field['storage']['type'];
-      $this->conditions[$field_storage_type][] = array(
+      $this->options[$field_storage_type]['filters'][] = array(
         'field' => $field,
         'filter' => $field_name,
         'value' => $value,
         'operator' => $operator,
       );
-      if (!array_key_exists($field_storage_type, $this->field_storage)) {
-        $this->field_storage[$field_storage_type] = $field['storage'];
-        $this->fs_order[] = $field_storage_type;
-      }
     }
     return $this;
   }
 
   /**
    * Orders the result set by a given field column.
-   * 
-   * @param $field
-   * @param $column
+   *
+   * @param $field_name
    * @param $direction
-   * @throws EntityFieldQueryException
+   *
    * @return TripalFieldQuery
    */
   public function fieldOrderBy($field_name, $direction = 'ASC') {
-    if (is_scalar($field_name)) {
-      $field_definition = field_info_field($field_name);
-      if (empty($field_definition)) {
-        throw new EntityFieldQueryException(t('Unknown field: @field_name', array('@field_name' => $field_name)));
-      }
-      $field_name = $field_definition;
+
+    // See if there is a subfield as part of the field_name.
+    $subfields = explode('.', $field_name);
+    if ($subfields > 1) {
+      $field = field_info_field($subfields[0]);
+    }
+    else {
+      $field = field_info_field($field_name);
+    }
+
+    if ($field) {
+      $field_storage_type = $field['storage']['type'];
+      $this->options[$field_storage_type]['sort'][] = array(
+        'field' => $field,
+        'orderBy' => $field_name,
+        'direction' => $direction,
+      );
     }
-    // Save the index used for the new field, for later use in field storage.
-    $index = count($this->fields);
-    $this->fields[$index] = $field_name;
-    $this->order[] = array(
-      'type' => 'field',
-      'specifier' => array(
-        'field' => $field_name,
-        'index' => $index,
-      ),
-      'direction' => $direction,
-    );
     return $this;
   }
 
@@ -106,23 +92,33 @@ class TripalFieldQuery {
    *  function are used.
    */
   public function execute() {
-    // Are there any conditions?  If so, then let the field storage
+    // Are there any filters?  If so, then let the field storage
     // systems handle the query. If there are no fields then just pull out
     // the list of entities.
-    // dpm($this->conditions);
-    // dpm($this->order);
+    // dpm($this->filters);
+    // dpm($this->sort);
 
     $entity_ids = array();
-    if (count($this->conditions) > 0) {
+    if (count($this->options) > 0) {
       // Iterate through each of the field storage types and run their
       // tquery() function.
-      foreach ($this->fs_order as $field_storage_type) {
-        $storage = $this->field_storage[$field_storage_type];
+      foreach ($this->options as $field_storage_type => $option) {
+        $filters = array_key_exists('filters', $option) ? $option['filters'] : array();
+        $sort = array_key_exists('sort', $option) ? $option['sort'] : array();
+
+        // Get the storage infor for the fields that belong to this type.
+        // We can get it from the first field.
+        if (count($filters) > 0) {
+          $storage = $filters[0]['field']['storage'];
+        }
+        else {
+          $storage = $sort[0]['field']['storage'];
+        }
         $module = $storage['module'];
         $function_name = $module . '_field_storage_tquery';
         $filter_ids = array();
         if (function_exists($function_name)) {
-          $filter_ids = $function_name($this->conditions[$field_storage_type]);
+          $filter_ids = $function_name($filters, $sort);
         }
         // Take the intersection of IDs in this filter with those in the
         // final $entity_ids;
@@ -144,10 +140,10 @@ class TripalFieldQuery {
         $entity_ids[] = $entity_id;
       }
     }
-    
+
     // Order the entities by the field
     if (count($this->order) > 0) {
-      
+
     }
 
     // Generate the entities for the keys.

+ 1 - 1
tripal/includes/tripal.field_storage.inc

@@ -81,7 +81,7 @@ function tripal_field_storage_query($query) {
  *
  * @param $conditions
  */
-function tripal_field_storage_tquery($conditions) {
+function tripal_field_storage_tquery($conditions, $sort) {
 
   $filter = array();
   $entity_ids = array();

+ 1 - 1
tripal_chado/includes/tripal_chado.field_storage.inc

@@ -412,7 +412,7 @@ function tripal_chado_field_storage_expand_field($item_name, $value) {
  *
  * @param $conditions
  */
-function tripal_chado_field_storage_tquery($conditions) {
+function tripal_chado_field_storage_tquery($conditions, $sort) {
   $filters = array();
   $entity_ids = array();
 

+ 0 - 1
tripal_ws/tripal_ws.info

@@ -7,4 +7,3 @@ version = 7.x-3.0-alpha1
 configure = admin/tripal/chado/tripal_ws
 
 dependencies[] = tripal
-dependencies[] = tripal