|  | @@ -27,6 +27,8 @@ function tripal_fields_layout_form_field_ui_field_edit_form_alter(&$form, &$form
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  function tripal_fields_layout_form_field_ui_display_overview_form_alter(&$form, &$form_state, $form_id) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  drupal_add_css(drupal_get_path('module','tripal_fields_layout') . '/theme/css/tripal_fields_layout_panels.css');
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  |    $entity_type = $form['#entity_type'];
 | 
	
		
			
				|  |  |    $bundle_name = $form['#bundle'];
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -60,10 +62,10 @@ function tripal_fields_layout_form_field_ui_display_overview_form_alter(&$form,
 | 
	
		
			
				|  |  |    );
 | 
	
		
			
				|  |  |    
 | 
	
		
			
				|  |  |    // Add a Panel
 | 
	
		
			
				|  |  | -  tripal_fields_layout_form_field_ui_display_overview_form_panel_add($form);
 | 
	
		
			
				|  |  | +  tripal_fields_layout_form_field_ui_display_overview_form_panel_add($form, $form_state);
 | 
	
		
			
				|  |  |    
 | 
	
		
			
				|  |  |    // Arrange Panels
 | 
	
		
			
				|  |  | -  tripal_fields_layout_form_field_ui_display_overview_form_panel_arrange($form, $bundle);
 | 
	
		
			
				|  |  | +  tripal_fields_layout_form_field_ui_display_overview_form_panel_arrange($form, $form_state, $bundle);
 | 
	
		
			
				|  |  |    
 | 
	
		
			
				|  |  |    // Configure Panels
 | 
	
		
			
				|  |  |    tripal_fields_layout_form_field_ui_display_overview_form_panel_configure($form, $bundle);
 | 
	
	
		
			
				|  | @@ -144,7 +146,8 @@ function tripal_fields_layout_form_field_ui_display_overview_form_alter(&$form,
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * Add a Panel Form
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  | -function tripal_fields_layout_form_field_ui_display_overview_form_panel_add (&$form) {
 | 
	
		
			
				|  |  | +function tripal_fields_layout_form_field_ui_display_overview_form_panel_add (&$form, &$form_state) {
 | 
	
		
			
				|  |  | +  $form_state['input']['panel_label'] = key_exists('panel_label', $form_state['input']) ? $form_state['values']['panel_label'] : NULL;
 | 
	
		
			
				|  |  |    $form['te_add_panels']['instructions'] = array(
 | 
	
		
			
				|  |  |      '#type' => 'item',
 | 
	
		
			
				|  |  |      '#markup' => t('You may add as many panels to your page layout as
 | 
	
	
		
			
				|  | @@ -160,11 +163,12 @@ function tripal_fields_layout_form_field_ui_display_overview_form_panel_add (&$f
 | 
	
		
			
				|  |  |    $form['te_add_panels']['panel_label'] = array(
 | 
	
		
			
				|  |  |      '#type' => 'textfield',
 | 
	
		
			
				|  |  |      '#title' => 'Panel Label',
 | 
	
		
			
				|  |  | +    '#default_value' => '',
 | 
	
		
			
				|  |  |      '#description' => t('Please provide a human readable label for this
 | 
	
		
			
				|  |  |          panel. This is the name that will appear to site visitors.')
 | 
	
		
			
				|  |  |    );
 | 
	
		
			
				|  |  |    $form['te_add_panels']['add_button'] = array(
 | 
	
		
			
				|  |  | -    '#type' => 'submit',
 | 
	
		
			
				|  |  | +    '#type' => 'button',
 | 
	
		
			
				|  |  |      '#value' => 'Add Panel',
 | 
	
		
			
				|  |  |      '#name' => 'add-panel-submit'
 | 
	
		
			
				|  |  |    );
 | 
	
	
		
			
				|  | @@ -173,7 +177,7 @@ function tripal_fields_layout_form_field_ui_display_overview_form_panel_add (&$f
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * Arrange Panels Form
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  | -function tripal_fields_layout_form_field_ui_display_overview_form_panel_arrange (&$form, $bundle) {
 | 
	
		
			
				|  |  | +function tripal_fields_layout_form_field_ui_display_overview_form_panel_arrange (&$form, &$form_state, $bundle) {
 | 
	
		
			
				|  |  |    $form['te_arrange_panels'] = array(
 | 
	
		
			
				|  |  |      '#type' => 'fieldset',
 | 
	
		
			
				|  |  |      '#title' => 'Arrange Panels',
 | 
	
	
		
			
				|  | @@ -196,6 +200,7 @@ function tripal_fields_layout_form_field_ui_display_overview_form_panel_arrange
 | 
	
		
			
				|  |  |    ->execute();
 | 
	
		
			
				|  |  |    $has_panel = FALSE;
 | 
	
		
			
				|  |  |    foreach ($result as $item) {
 | 
	
		
			
				|  |  | +    $form_state['input']['panel_items'][$item->panel_id]['newlabel'] = key_exists($item->panel_id, $form_state['input']) && $form_state['input'][$item->panel_id]['newlabel'] ? $form_state['values']['panel_items'][$item->panel_id]['newlabel'] : NULL;
 | 
	
		
			
				|  |  |      $form['te_arrange_panels']['panel_items'][$item->panel_id] = array(
 | 
	
		
			
				|  |  |        'label' => array(
 | 
	
		
			
				|  |  |          '#markup' => check_plain($item->label),
 | 
	
	
		
			
				|  | @@ -228,7 +233,7 @@ function tripal_fields_layout_form_field_ui_display_overview_form_panel_arrange
 | 
	
		
			
				|  |  |    if ($has_panel) {
 | 
	
		
			
				|  |  |      $form['te_arrange_panels']['panel_items']['#theme_wrappers'] = array('tripal_fields_layout_form_arrange_panels');
 | 
	
		
			
				|  |  |      $form['te_arrange_panels']['save_button'] = array(
 | 
	
		
			
				|  |  | -      '#type' => 'submit',
 | 
	
		
			
				|  |  | +      '#type' => 'button',
 | 
	
		
			
				|  |  |        '#value' => 'Save Panel Order',
 | 
	
		
			
				|  |  |        '#name' => 'order-panel-submit'
 | 
	
		
			
				|  |  |      );
 | 
	
	
		
			
				|  | @@ -256,29 +261,76 @@ function tripal_fields_layout_form_field_ui_display_overview_form_panel_configur
 | 
	
		
			
				|  |  |    $form['te_configure_panels']['panel_items']['#tree'] = TRUE;
 | 
	
		
			
				|  |  |    // Get available panels
 | 
	
		
			
				|  |  |    $panels = db_select('tripal_panels', 'tp')
 | 
	
		
			
				|  |  | -  ->fields('tp', array('panel_id', 'name', 'label', 'weight'))
 | 
	
		
			
				|  |  | -  ->condition('name', 'te_base', '<>')
 | 
	
		
			
				|  |  | +  ->fields('tp', array('panel_id', 'name', 'label', 'weight', 'settings'))
 | 
	
		
			
				|  |  |    ->condition('name', 'te_disabled', '<>')
 | 
	
		
			
				|  |  |    ->condition('bundle_id', $bundle->id)
 | 
	
		
			
				|  |  |    ->orderby('weight', 'asc')
 | 
	
		
			
				|  |  |    ->execute();
 | 
	
		
			
				|  |  |    $has_panel = FALSE;
 | 
	
		
			
				|  |  |    foreach ($panels as $panel) {
 | 
	
		
			
				|  |  | +    $panel_settings = unserialize($panel->settings);
 | 
	
		
			
				|  |  | +    $hz_table = key_exists('hz_table', $panel_settings) ? $panel_settings['hz_table'] : array();
 | 
	
		
			
				|  |  | +    $vt_table = key_exists('vt_table', $panel_settings) ? $panel_settings['vt_table'] : array();
 | 
	
		
			
				|  |  |      $form['te_configure_panels']['panel_items'][$panel->panel_id] = array(
 | 
	
		
			
				|  |  | -      'label' => array(
 | 
	
		
			
				|  |  | -        '#markup' => check_plain($panel->label),
 | 
	
		
			
				|  |  | -      ),
 | 
	
		
			
				|  |  | +      '#type' => 'fieldset',
 | 
	
		
			
				|  |  | +      '#title' => check_plain($panel->label),
 | 
	
		
			
				|  |  | +      '#collapsible' => TRUE,
 | 
	
		
			
				|  |  | +      '#collapsed' => FALSE,
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  |      //Add fields to each panel for changing configuration
 | 
	
		
			
				|  |  |      $fields = db_select('tripal_panel_fields', 'tpf')
 | 
	
		
			
				|  |  |      ->fields('tpf', array('field_id'))
 | 
	
		
			
				|  |  |      ->condition('panel_id', $panel->panel_id)
 | 
	
		
			
				|  |  |      ->execute();
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    $has_field = FALSE;
 | 
	
		
			
				|  |  | +    foreach ($fields AS $field) {
 | 
	
		
			
				|  |  | +      $field_obj = db_select('field_config_instance', 'tci')
 | 
	
		
			
				|  |  | +        ->fields('tci', array('field_name','data'))
 | 
	
		
			
				|  |  | +        ->condition('id', $field->field_id)
 | 
	
		
			
				|  |  | +        ->execute()
 | 
	
		
			
				|  |  | +        ->fetchObject();
 | 
	
		
			
				|  |  | +      $field_arr = unserialize($field_obj->data);
 | 
	
		
			
				|  |  | +      $fname = $field_obj->field_name;
 | 
	
		
			
				|  |  | +      if($fname == 'featureprop') {
 | 
	
		
			
				|  |  | +        continue;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      $flable = $field_arr['label'];
 | 
	
		
			
				|  |  | +      $form['te_configure_panels']['panel_items'][$panel->panel_id][$fname] = array(
 | 
	
		
			
				|  |  | +        '#type' => 'item',
 | 
	
		
			
				|  |  | +        '#title' => $flable,
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +      $default_value = 0;
 | 
	
		
			
				|  |  | +      if (in_array($fname, $hz_table)) {
 | 
	
		
			
				|  |  | +        $default_value = 1;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      else if (in_array($fname, $vt_table)) {
 | 
	
		
			
				|  |  | +        $default_value = 2;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      $form['te_configure_panels']['panel_items'][$panel->panel_id][$fname]['table_group'] = array(
 | 
	
		
			
				|  |  | +        '#type' => 'radios',
 | 
	
		
			
				|  |  | +        '#options' => array(
 | 
	
		
			
				|  |  | +          0 => 'No Group', 
 | 
	
		
			
				|  |  | +          1 => 'Horizontal Table', 
 | 
	
		
			
				|  |  | +          2 => 'Vertical Table'
 | 
	
		
			
				|  |  | +        ),
 | 
	
		
			
				|  |  | +        '#default_value' => $default_value,
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +      $has_field = TRUE;
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    if (!$has_field) {
 | 
	
		
			
				|  |  | +      $form['te_configure_panels']['panel_items'][$panel->panel_id]['no_field'] = array(
 | 
	
		
			
				|  |  | +        '#markup' => 'No field in this panel.',
 | 
	
		
			
				|  |  | +      );
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +      $form['te_configure_panels']['panel_items'][$panel->panel_id]['#theme_wrappers'] = array('tripal_fields_layout_form_configure_panels');
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      $has_panel = TRUE;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    if ($has_panel) {
 | 
	
		
			
				|  |  |      $form['te_configure_panels']['save_button'] = array(
 | 
	
		
			
				|  |  | -      '#type' => 'submit',
 | 
	
		
			
				|  |  | +      '#type' => 'button',
 | 
	
		
			
				|  |  |        '#value' => 'Save Configuration',
 | 
	
		
			
				|  |  |        '#name' => 'configure-panel-submit'
 | 
	
		
			
				|  |  |      );
 | 
	
	
		
			
				|  | @@ -380,66 +432,29 @@ function tripal_fields_layout_field_ui_row_region($row) {
 | 
	
		
			
				|  |  |   * @param $form_state
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  function tripal_fields_layout_field_ui_validate($form, &$form_state) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  // Add a Panel
 | 
	
		
			
				|  |  | +  // Add a panel
 | 
	
		
			
				|  |  |    if ($form_state ['clicked_button'] ['#name'] == 'add-panel-submit') {
 | 
	
		
			
				|  |  | -    // 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."));
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    // Generate a valide panel name using the label. 
 | 
	
		
			
				|  |  | -    // i.e. removing leading numbers and spaces
 | 
	
		
			
				|  |  | -    $name = strtolower(preg_replace ('/^\d|\s+/', '_', $label));
 | 
	
		
			
				|  |  | -    $name_exists = db_select('tripal_panels', 'tp')
 | 
	
		
			
				|  |  | -      ->fields('tp', array('panel_id'))
 | 
	
		
			
				|  |  | -      ->condition('name', $name)
 | 
	
		
			
				|  |  | -      ->execute()
 | 
	
		
			
				|  |  | -      ->fetchField();
 | 
	
		
			
				|  |  | -    if ($name_exists) {
 | 
	
		
			
				|  |  | -      form_set_error('panel_label', t('The name is used by another panel. Please use a different label.'));
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    else {
 | 
	
		
			
				|  |  | -      $form_state ['values'] ['panel_name'] = $name;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    tripal_fields_layout_action_add_panel($form, $form_state);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +  // Order panels
 | 
	
		
			
				|  |  |    else if ($form_state['clicked_button'] ['#name'] == 'order-panel-submit') {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  else if ($form_state['clicked_button'] ['#name'] == 'op') {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +    tripal_fields_layout_action_order_panels($form, $form_state);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  // Rename a Panel
 | 
	
		
			
				|  |  | +  // 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();
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | +    tripal_fields_layout_action_rename_panel ($form, $form_state);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  // Remove a Panel
 | 
	
		
			
				|  |  | +  // Remove a panel
 | 
	
		
			
				|  |  |    else if (preg_match('/^arrange-panel-remove-/', $form_state ['clicked_button'] ['#name'])) {
 | 
	
		
			
				|  |  | -    $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')
 | 
	
		
			
				|  |  | -    ->condition ('panel_id', $panel_id)
 | 
	
		
			
				|  |  | -    ->execute();
 | 
	
		
			
				|  |  | -    db_delete('tripal_panel_fields')
 | 
	
		
			
				|  |  | -    ->condition ('panel_id', $panel_id)
 | 
	
		
			
				|  |  | -    ->execute();
 | 
	
		
			
				|  |  | +    tripal_fields_layout_action_remove_panel ($form_state);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  // Configure panels
 | 
	
		
			
				|  |  | +  else if ($form_state['clicked_button'] ['#name'] == 'configure-panel-submit') {
 | 
	
		
			
				|  |  | +    tripal_fields_layout_action_configure_panels($form, $form_state);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  else if ($form_state['clicked_button'] ['#name'] == 'op') {
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * Responds to a submit from the field UI form for saving panel assignments.
 | 
	
	
		
			
				|  | @@ -448,39 +463,8 @@ function tripal_fields_layout_field_ui_validate($form, &$form_state) {
 | 
	
		
			
				|  |  |   * @param $form_state
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  function tripal_fields_layout_field_ui_submit($form, &$form_state) {
 | 
	
		
			
				|  |  | -  // Add a new panel
 | 
	
		
			
				|  |  | -  if ($form_state ['clicked_button'] ['#name'] == 'add-panel-submit') {
 | 
	
		
			
				|  |  | -    $bundle_id = $form_state['build_info']['args'][1]->id;
 | 
	
		
			
				|  |  | -    $name      = $form_state['values']['panel_name'];
 | 
	
		
			
				|  |  | -    $label     = $form_state['values']['panel_label'];
 | 
	
		
			
				|  |  | -    $settings = array(
 | 
	
		
			
				|  |  | -      'message' => 'Place field in this panel.',
 | 
	
		
			
				|  |  | -    );
 | 
	
		
			
				|  |  | -    db_insert('tripal_panels')
 | 
	
		
			
				|  |  | -    ->fields(array(
 | 
	
		
			
				|  |  | -      'bundle_id' => $bundle_id,
 | 
	
		
			
				|  |  | -      'name' => $name,
 | 
	
		
			
				|  |  | -      'label' => $label,
 | 
	
		
			
				|  |  | -      'settings' => serialize($settings),
 | 
	
		
			
				|  |  | -      'weight' => 0
 | 
	
		
			
				|  |  | -    ))
 | 
	
		
			
				|  |  | -    ->execute();
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  // Order panel
 | 
	
		
			
				|  |  | -  else if ($form_state ['clicked_button'] ['#name'] == 'order-panel-submit') {
 | 
	
		
			
				|  |  | -    $panels = $form_state['values']['panel_items'];
 | 
	
		
			
				|  |  | -    foreach ($panels AS $id => $panel) {
 | 
	
		
			
				|  |  | -      db_query(
 | 
	
		
			
				|  |  | -        'UPDATE {tripal_panels} SET weight = :weight WHERE panel_id = :id',
 | 
	
		
			
				|  |  | -        array(
 | 
	
		
			
				|  |  | -          ':weight' => $panel['weight'],
 | 
	
		
			
				|  |  | -          ':id' => $id
 | 
	
		
			
				|  |  | -        )
 | 
	
		
			
				|  |  | -      );
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  // Save field regions
 | 
	
		
			
				|  |  | -  else if ($form_state ['clicked_button'] ['#name'] == 'op') {
 | 
	
		
			
				|  |  | +  // Save fields for each panel
 | 
	
		
			
				|  |  | +  if ($form_state ['clicked_button'] ['#name'] == 'op') {
 | 
	
		
			
				|  |  |      $fields = $form_state['values']['fields'];
 | 
	
		
			
				|  |  |      foreach($fields AS $field_name => $field_data){
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -522,7 +506,100 @@ function tripal_fields_layout_field_ui_submit($form, &$form_state) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  | - *  Theme the Panel Order Table as a draggable table
 | 
	
		
			
				|  |  | + * Add a new panel
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_fields_layout_action_add_panel (&$form, &$form_state) {
 | 
	
		
			
				|  |  | +  // 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."));
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  // Generate a valide panel name using the label.
 | 
	
		
			
				|  |  | +  // i.e. removing leading numbers and spaces
 | 
	
		
			
				|  |  | +  $name = strtolower(preg_replace ('/^\d|\s+/', '_', $label));
 | 
	
		
			
				|  |  | +  $name_exists = db_select('tripal_panels', 'tp')
 | 
	
		
			
				|  |  | +  ->fields('tp', array('panel_id'))
 | 
	
		
			
				|  |  | +  ->condition('name', $name)
 | 
	
		
			
				|  |  | +  ->execute()
 | 
	
		
			
				|  |  | +  ->fetchField();
 | 
	
		
			
				|  |  | +  if ($name_exists) {
 | 
	
		
			
				|  |  | +    form_set_error('panel_label', t('The name is used by another panel. Please use a different label.'));
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  else {
 | 
	
		
			
				|  |  | +    $form_state ['values'] ['panel_name'] = $name;
 | 
	
		
			
				|  |  | +    $bundle_id = $form_state['build_info']['args'][1]->id;
 | 
	
		
			
				|  |  | +    $name      = $form_state['values']['panel_name'];
 | 
	
		
			
				|  |  | +    $label     = $form_state['values']['panel_label'];
 | 
	
		
			
				|  |  | +    $settings = array(
 | 
	
		
			
				|  |  | +      'message' => 'Place field in this panel.',
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +    db_insert('tripal_panels')
 | 
	
		
			
				|  |  | +    ->fields(array(
 | 
	
		
			
				|  |  | +      'bundle_id' => $bundle_id,
 | 
	
		
			
				|  |  | +      'name' => $name,
 | 
	
		
			
				|  |  | +      'label' => $label,
 | 
	
		
			
				|  |  | +      'settings' => serialize($settings),
 | 
	
		
			
				|  |  | +      'weight' => 0
 | 
	
		
			
				|  |  | +    ))
 | 
	
		
			
				|  |  | +    ->execute();
 | 
	
		
			
				|  |  | +    form_set_value($form['te_add_panels']['panel_label'], '', $form_state);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Rename panel
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_fields_layout_action_rename_panel (&$form, &$form_state) {
 | 
	
		
			
				|  |  | +  $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,
 | 
	
		
			
				|  |  | +      'name' => strtolower(preg_replace ('/^\d|\s+/', '_', $newlabel))
 | 
	
		
			
				|  |  | +    ))
 | 
	
		
			
				|  |  | +    ->condition('panel_id', $panel_id)
 | 
	
		
			
				|  |  | +    ->execute();
 | 
	
		
			
				|  |  | +    form_set_value($form['te_arrange_panels']['panel_items'][$panel_id]['newlabel'], '', $form_state);    
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Remove panel
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_fields_layout_action_remove_panel (&$form_state) {
 | 
	
		
			
				|  |  | +  $button = $form_state ['triggering_element'] ['#name'];
 | 
	
		
			
				|  |  | +  $panel_id = str_replace ('arrange-panel-remove-', '', $button);
 | 
	
		
			
				|  |  | +  db_delete('tripal_panels')
 | 
	
		
			
				|  |  | +  ->condition ('panel_id', $panel_id)
 | 
	
		
			
				|  |  | +  ->execute();
 | 
	
		
			
				|  |  | +  db_delete('tripal_panel_fields')
 | 
	
		
			
				|  |  | +  ->condition ('panel_id', $panel_id)
 | 
	
		
			
				|  |  | +  ->execute();
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Order panel
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_fields_layout_action_order_panels (&$form, &$form_state) {
 | 
	
		
			
				|  |  | +  $panels = $form_state['values']['panel_items'];
 | 
	
		
			
				|  |  | +  foreach ($panels AS $id => $panel) {
 | 
	
		
			
				|  |  | +    db_query('UPDATE {tripal_panels} SET weight = :weight WHERE panel_id = :id',
 | 
	
		
			
				|  |  | +      array(
 | 
	
		
			
				|  |  | +        ':weight' => $panel['weight'],
 | 
	
		
			
				|  |  | +        ':id' => $id
 | 
	
		
			
				|  |  | +      )
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + *  Theme the Arrange Panels as a draggable table
 | 
	
		
			
				|  |  |   *
 | 
	
		
			
				|  |  |   * @param unknown $variables
 | 
	
		
			
				|  |  |   * @return unknown
 | 
	
	
		
			
				|  | @@ -578,6 +655,93 @@ function theme_tripal_fields_layout_form_arrange_panels ($variables) {
 | 
	
		
			
				|  |  |    return $output;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Configure panels
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function tripal_fields_layout_action_configure_panels (&$form, &$form_state) {
 | 
	
		
			
				|  |  | +  $panels = $form_state['values']['panel_items'];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  foreach ($panels AS $id => $panel) {
 | 
	
		
			
				|  |  | +    $hz_table = array();
 | 
	
		
			
				|  |  | +    $vt_table = array();
 | 
	
		
			
				|  |  | +    foreach($panel AS $key => $value) {
 | 
	
		
			
				|  |  | +      if (is_array($value) && key_exists('table_group', $value)) {
 | 
	
		
			
				|  |  | +        if ($value['table_group'] == 1) {
 | 
	
		
			
				|  |  | +          $hz_table[] = $key;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else if ($value['table_group'] == 2) {
 | 
	
		
			
				|  |  | +          $vt_table[] = $key;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    $panel_settings = db_select('tripal_panels', 'tp')
 | 
	
		
			
				|  |  | +      ->fields('tp', array('settings'))
 | 
	
		
			
				|  |  | +      ->condition('panel_id', $id)
 | 
	
		
			
				|  |  | +      ->execute()
 | 
	
		
			
				|  |  | +      ->fetchField();
 | 
	
		
			
				|  |  | +    $new_settings = unserialize($panel_settings);
 | 
	
		
			
				|  |  | +    $new_settings['hz_table'] = $hz_table;
 | 
	
		
			
				|  |  | +    $new_settings['vt_table'] = $vt_table;
 | 
	
		
			
				|  |  | +    db_update('tripal_panels')
 | 
	
		
			
				|  |  | +      ->fields(array(
 | 
	
		
			
				|  |  | +        'settings' => serialize($new_settings)
 | 
	
		
			
				|  |  | +      ))
 | 
	
		
			
				|  |  | +      ->condition('panel_id', $id)
 | 
	
		
			
				|  |  | +      ->execute();
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + *  Theme the Configure Panels as a table
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @param unknown $variables
 | 
	
		
			
				|  |  | + * @return unknown
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +function theme_tripal_fields_layout_form_configure_panels ($variables) {
 | 
	
		
			
				|  |  | +  $element = $variables['element'];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  $rows = array();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  foreach (element_children($element) as $id) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    $element[$id]['table_group']['#printed'] = FALSE;
 | 
	
		
			
				|  |  | +    $rows[] = array(
 | 
	
		
			
				|  |  | +      'data' => array(
 | 
	
		
			
				|  |  | +        $element[$id]['#title'],
 | 
	
		
			
				|  |  | +        drupal_render($element[$id]['table_group']),
 | 
	
		
			
				|  |  | +      ),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Create table header
 | 
	
		
			
				|  |  | +  $header = array(t('Field'), t('Table Group'));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Create a unique id for drupal_add_tabledrag() to find the table object
 | 
	
		
			
				|  |  | +  $table_id = 'tripal_panel-configure_panel_table-' . strtolower($element['#title']);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // Create output
 | 
	
		
			
				|  |  | +  $table = '';
 | 
	
		
			
				|  |  | +  if (count($rows) > 0) {
 | 
	
		
			
				|  |  | +    $table = theme('table', array(
 | 
	
		
			
				|  |  | +      'header' => $header,
 | 
	
		
			
				|  |  | +      'rows' => $rows,
 | 
	
		
			
				|  |  | +      'attributes' => array('id' => $table_id),
 | 
	
		
			
				|  |  | +    ));
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +  $collapsible_item = array('element' => array());
 | 
	
		
			
				|  |  | +  $collapsible_item['element']['#children'] = '';
 | 
	
		
			
				|  |  | +  $collapsible_item['element']['#description'] = 
 | 
	
		
			
				|  |  | +    '<div id="tripal_fields_layout-panel_configure-fieldset-instruction">
 | 
	
		
			
				|  |  | +        Select a group to organize fields into table(s) in this panel.
 | 
	
		
			
				|  |  | +     <div>'
 | 
	
		
			
				|  |  | +    . $table;
 | 
	
		
			
				|  |  | +  $collapsible_item['element']['#title'] = $element['#title'];
 | 
	
		
			
				|  |  | +  $collapsible_item['element']['#attributes']['class'] = array('tripal_fields_layout-panel_configure-fieldset', 'collapsible');
 | 
	
		
			
				|  |  | +  $output = theme('fieldset', $collapsible_item);
 | 
	
		
			
				|  |  | +  return $output;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * Implements hook_theme().
 | 
	
		
			
				|  |  |   */
 | 
	
	
		
			
				|  | @@ -586,6 +750,9 @@ function tripal_fields_layout_theme($existing, $type, $theme, $path) {
 | 
	
		
			
				|  |  |      'tripal_fields_layout_form_arrange_panels' => array(
 | 
	
		
			
				|  |  |        'render element' => 'element',
 | 
	
		
			
				|  |  |      ),
 | 
	
		
			
				|  |  | +    'tripal_fields_layout_form_configure_panels' => array(
 | 
	
		
			
				|  |  | +      'render element' => 'element',
 | 
	
		
			
				|  |  | +    ),
 | 
	
		
			
				|  |  |      'tripal_fields_layout_generic' => array(
 | 
	
		
			
				|  |  |        'render element' => 'element',
 | 
	
		
			
				|  |  |        'template' => 'tripal_fields_layout_generic',
 |