Browse Source

Allowed user to rename a panel. Fixed the display order for fields showing in a horizontal table

Chun-Huai Cheng 9 years ago
parent
commit
097c9f7aab

+ 8 - 1
tripal_fields_layout/theme/templates/tripal_fields_layout_generic.tpl.php

@@ -1,5 +1,6 @@
 <?php
 
+drupal_add_js('misc/form.js');
 drupal_add_js('misc/collapse.js');
 $panels = $variables['element']['#panels'];
 $fields = $variables['element']['#fields'];
@@ -16,8 +17,14 @@ foreach ($panels AS $panel_id => $panel) {
 
   // If the format is horizontal table then format the fields in tabular format.
   if ($horz_table) {
+    // reorder the fields by its weight
+    $ordered_fields = array();
+    foreach ($panel_fields AS $field) {
+      $ordered_fields[$field['#weight']] = $field;
+    }
+    ksort($ordered_fields);
     $rows = array();
-    foreach ($panel_fields as $field) {
+    foreach ($ordered_fields as $field) {
       $rows[] = array(
         array(
           'data' => $field['#title'],

+ 51 - 18
tripal_fields_layout/tripal_fields_layout.module

@@ -82,19 +82,19 @@ function tripal_fields_layout_form_field_ui_display_overview_form_alter(&$form,
     '#name' => 'add-panel-submit'
   );
 
-  // Layout Panels
-  $form['te_layout_panels'] = array(
+  // Arrange Panels
+  $form['te_arrange_panels'] = array(
     '#type' => 'fieldset',
     '#title' => 'Arrange Panels',
     '#collapsible' => TRUE,
     '#collapsed' => TRUE,
     '#group' => 'overview_vert_tabs'
   );
-  $form['te_layout_panels']['instructions'] = array(
+  $form['te_arrange_panels']['instructions'] = array(
     '#type' => 'item',
     '#markup' => t('Drag and drop the panel to change its order.')
   );
-  $form['te_layout_panels']['panel_items']['#tree'] = TRUE;
+  $form['te_arrange_panels']['panel_items']['#tree'] = TRUE;
   // Get available panels
   $result = db_select('tripal_panels', 'tp')
             ->fields('tp', array('panel_id', 'name', 'label', 'weight'))
@@ -105,7 +105,7 @@ function tripal_fields_layout_form_field_ui_display_overview_form_alter(&$form,
             ->execute();
   $has_panel = FALSE;
   foreach ($result as $item) {
-    $form['te_layout_panels']['panel_items'][$item->panel_id] = array(
+    $form['te_arrange_panels']['panel_items'][$item->panel_id] = array(
       'label' => array(
         '#markup' => check_plain($item->label),
       ),
@@ -116,6 +116,16 @@ function tripal_fields_layout_form_field_ui_display_overview_form_alter(&$form,
         '#delta' => 50,
         '#title_display' => 'invisible',
       ),
+      'newlabel' => array(
+        '#type' => 'textfield',
+        '#default_value' => '',
+        '#size' => 10
+      ),
+      'rename' => array(
+        '#type' => 'button',
+        '#value' => 'Rename',
+        '#name' => "arrange-panel-rename-$item->panel_id",
+      ),
       'remove' => array(
         '#type' => 'button',
         '#value' => 'Remove',
@@ -125,19 +135,19 @@ function tripal_fields_layout_form_field_ui_display_overview_form_alter(&$form,
     $has_panel = TRUE;
   }
   if ($has_panel) {
-    $form['te_layout_panels']['panel_items']['#theme_wrappers'] = array('tripal_fields_layout_form_draggable_panel_table');
+    $form['te_arrange_panels']['panel_items']['#theme_wrappers'] = array('tripal_fields_layout_form_draggable_panel_table');
     // Now we add our submit button, for submitting the form results.
     //
     // The 'actions' wrapper used here isn't strictly necessary for tabledrag,
     // but is included as a Form API recommended practice.
-    $form['te_layout_panels']['add_button'] = array(
+    $form['te_arrange_panels']['add_button'] = array(
       '#type' => 'submit',
       '#value' => 'Save Panel Order',
       '#name' => 'order-panel-submit'
     );
   }
   else {
-    $form['te_layout_panels']['instructions']['#markup'] = t('You need to add some panel first.');
+    $form['te_arrange_panels']['instructions']['#markup'] = t('You need to add some panel first.');
   }
 
   // Configure Panels
@@ -319,29 +329,48 @@ function tripal_fields_layout_field_ui_validate($form, &$form_state) {
     // Check if a valide panel name is provided
     $name = $form_state ['values'] ['panel_name'];
     if (! $name) {
-      form_set_error ( 'panel_name', t ( "Please provide a name for the new panel." ) );
+      form_set_error('panel_name', t ("Please provide a name for the new panel."));
     }
-    else if (preg_match ( '/^\d+/', $name )) {
-      form_set_error ( 'panel_name', t ( "Panel name must not begin with a number." ) );
+    else if (preg_match('/^\d+/', $name )) {
+      form_set_error('panel_name', t ("Panel name must not begin with a number."));
     }
-    else if (preg_match ( '/\s+/', $name )) {
-      form_set_error ( 'panel_name', t ( "Panel name should only contain alphanumeric values and underscores." ) );
+    else if (preg_match ('/\s+/', $name)) {
+      form_set_error('panel_name', t ("Panel name should only contain alphanumeric values and underscores."));
     }
 
     // Check if a panel label is provided
     $label = $form_state ['values'] ['panel_label'];
     if (! $label) {
-      form_set_error ( 'panel_label', t ( "Please provide a label for the new panel." ) );
+      form_set_error('panel_label', t ("Please provide a label for the new panel."));
     }
   }
-  else if ($form_state ['clicked_button'] ['#name'] == 'order-panel-submit') {
+  else if ($form_state['clicked_button'] ['#name'] == 'order-panel-submit') {
 
   }
-  else if ($form_state ['clicked_button'] ['#name'] == 'op') {
+  else if ($form_state['clicked_button'] ['#name'] == 'op') {
 
   }
+  // Rename a Panel
+  else if (preg_match('/^arrange-panel-rename-/', $form_state ['clicked_button'] ['#name'])) {
+    $table = $form['te_arrange_panels']['panel_items'];
+    $button = $form_state ['triggering_element'] ['#name'];
+    $panel_id = str_replace ('arrange-panel-rename-', '', $button);
+    $newlabel = $form_state['values']['panel_items'][$panel_id]['newlabel'];
+    if (!trim($newlabel)) {
+      form_set_error ('panel_label', t ( "Please provide a label to rename a panel." ) );
+    }
+    else {
+      db_update('tripal_panels')
+        ->fields(array(
+          'label' => $newlabel
+        ))
+        ->condition ('panel_id', $panel_id)
+        ->execute();
+    }
+  }
+  // Remove a Panel
   else if (preg_match('/^arrange-panel-remove-/', $form_state ['clicked_button'] ['#name'])) {
-    $table = $form['te_layout_panels']['panel_items'];
+    $table = $form['te_arrange_panels']['panel_items'];
     $button = $form_state ['triggering_element'] ['#name'];
     $panel_id = str_replace ('arrange-panel-remove-', '', $button);
     db_delete('tripal_panels')
@@ -452,12 +481,16 @@ function theme_tripal_fields_layout_form_draggable_panel_table ($variables) {
 
     $element[$id]['label']['#printed'] = FALSE;
     $element[$id]['weight']['#printed'] = FALSE;
+    $element[$id]['newlabel']['#printed'] = FALSE;
+    $element[$id]['rename']['#printed'] = FALSE;
     $element[$id]['remove']['#printed'] = FALSE;
 
     $rows[] = array(
       'data' => array(
         drupal_render($element[$id]['label']),
         drupal_render($element[$id]['weight']),
+        drupal_render($element[$id]['newlabel']),
+        drupal_render($element[$id]['rename']),
         drupal_render($element[$id]['remove'])
       ),
       // Add draggable to each row to support the tabledrag behaviour
@@ -466,7 +499,7 @@ function theme_tripal_fields_layout_form_draggable_panel_table ($variables) {
   }
 
   // Create table header
-  $header = array(t('Label'), t('Weight'), t('Action'));
+  $header = array(t('Panel'), t('Weight'), t('New Lable'), t('Update'), t('Action'));
 
   // Create a unique id for drupal_add_tabledrag() to find the table object
   $table_id = 'tripal_panel-arrange_panel_table';