Browse Source

changes the tripal display suite module to handle tripal panes with multiple fields where one is empty

Shawna Spoor 6 years ago
parent
commit
48a6197475
2 changed files with 37 additions and 18 deletions
  1. 4 0
      tripal_ds/theme/css/tripal_ds.css
  2. 33 18
      tripal_ds/tripal_ds.module

+ 4 - 0
tripal_ds/theme/css/tripal_ds.css

@@ -74,4 +74,8 @@ span.download-icon {
   cursor: pointer;
   margin-top: 4px;
   color: #777777;
+}
+
+.ds-hide {
+  display: none;
 }

+ 33 - 18
tripal_ds/tripal_ds.module

@@ -470,6 +470,7 @@ function tripal_ds_field_display_alter(&$display, $context){
     $hide_variable = tripal_get_bundle_variable('hide_empty_field', $bundle_info->id);
     $ajax_variable = tripal_get_bundle_variable('ajax_field', $bundle_info->id);
 
+
     if ($field_name && ($hide_variable == TRUE) && ($ajax_variable == FALSE)) {
       $item = field_get_items('TripalEntity', $context['entity'], $field_name);
       $field = field_info_field($field_name);
@@ -477,11 +478,16 @@ function tripal_ds_field_display_alter(&$display, $context){
         if (tripal_field_is_empty($item[0], $field)) {
           $parent_field_info = tripal_ds_find_field_group_parent($field_name, 'TripalEntity', $bundle, $context);
           if (!empty($parent_field_info)) {
-            foreach ($parent_field_info as $parent_key => $parent_field){
-               // We want to use JavaScript to remove the fields rather than
-               // CSS to hide them so that when users theme the table of
-               // contents using CSS they aren't theming empty rows.
-               drupal_add_js('jQuery(document).ready(function () { jQuery("#' . $parent_field_info[$parent_key] . '").parents(".views-row").remove() });', 'inline');
+            foreach ($parent_field_info as $parent_key => $parent_field) {
+              if (strpos($parent_field, 'single_field') !== false) {
+                $field_name = str_replace("_single_field", "", $parent_field);
+                drupal_add_js('jQuery(document).ready(function () { jQuery("#tripal-entity-' . $bundle_info->term_id . '--' . $field_name . '").addClass("ds-hide") });', 'inline');
+              }
+              // We want to use JavaScript to remove the fields rather than
+              // CSS to hide them so that when users theme the table of
+              // contents using CSS they aren't theming empty rows.
+              drupal_add_js('jQuery(document).ready(function () { jQuery("#' . $parent_field_info[$parent_key] . '").parents(".views-row").remove() });', 'inline');
+
             }
           }
         }
@@ -507,6 +513,7 @@ function tripal_ds_find_field_group_parent($field_name, $entity_type, $bundle, $
   $field_groups_to_hide = array();
   $increment = 0;
 
+
   // Get the field groups associated with this bundle.
   $fg_for_bundle = db_select('field_group', 'fg')
     ->fields('fg')
@@ -522,24 +529,30 @@ function tripal_ds_find_field_group_parent($field_name, $entity_type, $bundle, $
       // Do nothing
     }
     elseif (!empty($field_group_data['children'][0])) {
+      $children_added = 0;
       $children = $field_group_data['children'];
       //If there is more than one child all need to be checked.
       if (count($children) > 1) {
-        foreach ($children as $kids => $child) {
-          // Now check if each child if empty.
+        foreach ($children as $order => $child) {
+          // Now check if each child is empty.
           $item = field_get_items('TripalEntity', $context['entity'], $child);
           $field = field_info_field($child);
-          if(!tripal_field_is_empty($item[0], $field)){
-            //If any of the fields are not empty do not add the parent.
-            break 2;
-          }
-          else {
+          if(tripal_field_is_empty($item[0], $field)){
+            //If any of the fields are not empty do not add the parent, add the specific field.
+            // break 2;
+            if (!empty($field)) {
+              $field_groups_to_hide[$increment] = $field['field_name'] . '_single_field';
+              $increment++;
+              $children_added++;
+            }
+          } else {
             continue;
           }
         }
-        $field_groups_to_hide[$increment] = $field_group->group_name;
-      }
-      elseif($children[0] == $field_name) {
+        if ($children_added === count($children)) {
+          $field_groups_to_hide[$increment] = $field_group->group_name;
+        }
+      } elseif ($children[0] == $field_name) {
         $field_groups_to_hide[$increment] = $field_group->group_name;
       }
     }
@@ -559,7 +572,8 @@ function tripal_ds_find_field_group_parent($field_name, $entity_type, $bundle, $
  * @param $bundle
  * @param array $fields
  */
-function tripal_ds_toc_order($bundle, $fields = array()){
+function tripal_ds_toc_order($bundle, $fields = array())
+{
   // Find all menu items associated with the bundle id.
   $menu_items = db_select('tripal_ds', 'ds')
     ->fields('ds')
@@ -573,7 +587,7 @@ function tripal_ds_toc_order($bundle, $fields = array()){
     if (array_key_exists($toc_field_name, $fields)) {
       $weight = $fields[$toc_field_name]['weight'];
       //If a weight is returned update the tripal_ds table.
-      if(!empty($weight)){
+      if (!empty($weight)) {
         db_update('tripal_ds')
           ->fields(array(
             'weight' => $weight,
@@ -591,6 +605,7 @@ function tripal_ds_toc_order($bundle, $fields = array()){
  *
  *
  */
-function tripal_ds_import_api() {
+function tripal_ds_import_api()
+{
   module_load_include('inc', 'tripal_ds', 'api/tripal_ds.pane.api');
 }