Răsfoiți Sursa

Fixes for Lacey :=)

Stephen Ficklin 6 ani în urmă
părinte
comite
c1f383d6b4
1 a modificat fișierele cu 60 adăugiri și 37 ștergeri
  1. 60 37
      tripal/includes/TripalEntityUIController.inc

+ 60 - 37
tripal/includes/TripalEntityUIController.inc

@@ -701,34 +701,55 @@ function tripal_entity_form_submit($form, &$form_state) {
  * TripalEntityUIController class.
  */
 function tripal_add_page() {
-   
-  $select = "
-    SELECT TB.id, TB.label, TBV.value as category, TV.name as variable_type, TV.description
-    FROM tripal_bundle TB
-      LEFT JOIN tripal_bundle_variables TBV on TB.id = TBV.bundle_id
-      LEFT JOIN tripal_variables TV on TV.variable_id = TBV.variable_id
-    WHERE TV.name = 'bundle_category'
-    ORDER BY TBV.value, TB.label 
-  ";
-  $bundles = db_query($select);  
   
+  // The content array to be returned.
   $content = [];
-  $category = 'Other';
-  $machine_name = preg_replace('/[^\w]/', '_', $category);
+   
   $content['instructions'] = [
     '#type' => 'markup',
     '#markup' => 'This page provides links for creating pages for Tripal ' . 
       'supported content types. These types are organized by categories. ' . 
       'Please note, however, that the categorization is the most common use ' . 
       'for a given type. Some types may be useful in other "categoreis" as well.',
-    '#weight' => -10,
+    '#weight' => -15,
   ];
   
+
+  // Get the list of categories.
+  $select = "
+    SELECT TBV.value as category
+    FROM tripal_bundle_variables TBV
+      INNER JOIN tripal_variables TV on TV.variable_id = TBV.variable_id
+    WHERE TV.name = 'bundle_category'
+  ";
+  $categories = db_query($select);
+  
+  
+  // Build the fieldsets for the categories.
+  $fieldsets = [];
+  $category_weight = 1;
+  while ($category = $categories->fetchField()) {
+    $machine_name = preg_replace('/[^\w]/', '_', $category);
+    $fieldsets[$machine_name . '_fieldset'] = [
+      '#type' => 'fieldset',
+      '#title' => $category,
+      '#collapsed' => TRUE,
+      '#collapsible' => TRUE,
+      '#attributes' => array(
+        'class' => array('collapsible', 'tripal-content-list'),
+      ),
+      '#attached' => array(
+        'js' => array('misc/collapse.js', 'misc/form.js')
+      ),
+      '#weight' => $category == 'General' ? -10 : $category_weight++,
+    ];
+  }
+  
   // Create the "other" fieldset, and set it's weight to 100 so it goes to
   // the bottom.
-  $content[$machine_name . '_fieldset'] = [
+  $fieldsets['Other_fieldset'] = [
     '#type' => 'fieldset',
-    '#title' => $category,
+    '#title' => 'Other',
     '#weight' => 100,
     '#collapsed' => TRUE,
     '#collapsible' => TRUE,
@@ -738,37 +759,37 @@ function tripal_add_page() {
     '#attached' => array(
       'js' => array('misc/collapse.js', 'misc/form.js')
     ),
-    
   ]; 
   
-  $category_weight = 0;
+  
+  // Get the list of bundles and iterate through them.
+  $select = "SELECT id, name, label FROM tripal_bundle ORDER BY label";
+  $bundles = db_query($select);
   while ($bundle = $bundles->fetchObject()) {
-    if ($category != $bundle->category) {
-      $category = $bundle->category;
-      if (!$category) {
-        $category = 'Other';
-      }
-      $machine_name = preg_replace('/[^\w]/', '_', $category);
-      $content[$machine_name . '_fieldset'] = [
-        '#type' => 'fieldset',
-        '#title' => $category,
-        '#collapsed' => TRUE,
-        '#collapsible' => TRUE,
-        '#attributes' => array(
-          'class' => array('collapsible', 'tripal-content-list'),
-        ),
-        '#attached' => array(
-          'js' => array('misc/collapse.js', 'misc/form.js')
-        ),
-        '#weight' => $category_weight,
-      ]; 
-      $category_weight++;
+    
+    // Lookup the bundle category.
+    $sql = "
+      SELECT TBV.value as category
+      FROM tripal_bundle TB
+        INNER JOIN tripal_bundle_variables TBV on TB.id = TBV.bundle_id
+        INNER JOIN tripal_variables TV on TV.variable_id = TBV.variable_id
+      WHERE TV.name = 'bundle_category' and TB.id = :id;
+    ";
+  
+    $category = db_query($sql, [':id' => $bundle->id])->fetchField();
+    if (!$category) {
+      $category = 'Other';
     }
+    
+    $machine_name = preg_replace('/[^\w]/', '_', $category);
     $bundle = tripal_load_bundle_entity(['id' => $bundle->id]);
     if (!$bundle) {
       continue;
     }
     if (user_access('create ' . $bundle->name)) {
+      if (!array_key_exists($machine_name . '_fieldset', $content)) {
+        $content[$machine_name . '_fieldset'] = $fieldsets[$machine_name . '_fieldset'];
+      }
       $content[$machine_name . '_fieldset'][$bundle->name] = [
         '#type' => 'item',
         '#markup' => l($bundle->label, 'bio_data/add/' . $bundle->id),
@@ -776,6 +797,8 @@ function tripal_add_page() {
       ];
     }
   }
+  
+  // Now iterate through the fieldsets and set their weight
   return $content;
 }