| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 | <?php/** * @file * Contains the admin functions for Node form columns */function _nodeformcols_get_node_type_form($type) {  module_load_include('inc', 'node', 'node.pages');  global $user;  $node = new stdClass();  $node->uid = $user->uid;  $node->name = isset($user->name) ? $user->name : '';  $node->type = $type;  $node->language = '';  $nfid = $type . '_node_form';  $fs = array(    'build_info' => array('args' => array($node)),    'input' => array(),  );  $fs += form_state_defaults();  $nf = drupal_retrieve_form($nfid, $fs);  drupal_prepare_form($nfid, $nf, $fs);  drupal_process_form($nfid, $nf, $fs);  return $nf;}function nodeformcols_update_placements($type, $variant, &$placements) {  $form = _nodeformcols_get_node_type_form($type);  drupal_alter('nodeformcols_base_form', $form, $variant);  $default_region = variable_get('nodeformcols_default_region', NODEFORMCOLS_DEFAULT_REGION);  foreach (element_children($form) as $key) {    $field = $form[$key];    if (      substr($key, 0, 8) == 'section_' ||      (isset($field['#type']) && in_array($field['#type'], array('value', 'hidden', 'token'))) ||      (isset($field['#type'], $field['#group']) && $field['#type'] === 'fieldset')    ) {      // Remove placements that meet exclusion rules.      if (isset($placements[$key])) {        unset($placements[$key]);      }      continue;    }    // Ensure a weight so that we don't have to worry about it later    $field['#weight'] = isset($field['#weight']) ? $field['#weight'] : 0;    if (!isset($placements[$key])) {      // If the element is unknown we'll add it to      // the field placement list      $placements[$key] = array(        'region' => $default_region,        'weight' => $field['#weight'],      );      // Make sure that we don't auto-place the field below the buttons.      if ($placements['actions']['region'] == $default_region && $placements[$key]['weight'] >= $placements['actions']['weight']) {        $placements[$key]['weight'] = $placements['actions']['weight'] - .1;      }    }    elseif (!isset($placements[$key]['weight'])) {      $placements[$key]['weight'] = $field['#weight'];    }    $placements[$key]['has_required'] = _nodeformcols_has_required($field);    // Get the element title    $placements[$key]['title'] = _nodeformcols_get_element_title($field);    if (isset($field['#collapsible']) && $field['#collapsible']) {      if (!isset($placements[$key]['collapsed'])) {        $placements[$key]['collapsed'] =  isset($field['#collapsed']) && $field['#collapsed'];      }    }    else {      unset($placements[$key]['collapsed']);    }  }  // Remove fields that have disappeared from  // the placements list.  foreach ($placements as $key => $info) {    if (!isset($form[$key])) {      unset($placements[$key]);    }  }}function _nodeformcols_get_element_title($element) {  if (!empty($element['#title'])) {    return $element['#title'];  }  if (isset($element['#type']) && $element['#type'] == 'submit') {    return $element['#value'];  }  if (isset($element['#type']) && $element['#type'] == 'vertical_tabs') {    return t('Vertical tabs');  }  foreach (element_children($element) as $key) {    if ($title = _nodeformcols_get_element_title($element[$key])) {      return $title;    }  }}function nodeformcols_configuration_form($form, $form_state, $node_type, $variant = 'default') {  $type = $node_type->type;  $variants = array();  drupal_alter('nodeformcols_variants', $variants, $type);  $form = array();  if (!empty($variants)) {    $variant_links = array(      'default' => array(        'title' => t('Default'),        'href' => 'admin/structure/types/manage/' . $type . '/form',      ),    );    foreach ($variants as $id => $title) {      $variant_links[] = array(        'title' => $title,        'href' => 'admin/structure/types/manage/' . $type . '/form/' . $id,      );    }    $form['variant'] = array(      '#type' => 'item',      '#title' => t('Select a form variant'),      '#value' => theme('links', array('links' => $variant_links)),    );  }  if (empty($variant)) {    $variant = 'default';  }  $form['#variant'] = $variant;  $placements = nodeformscols_field_placements($type, $variant);  nodeformcols_update_placements($type, $variant, $placements);  $regions = nodeformcols_form_regions();  $form['type'] = array(    '#type' => 'value',    '#value' => $type,  );  $form['#after_build'][] = '_nodeformcols_configuration_form_after_build';  $form['conf'] = array(    '#theme' => array('nodeformcols_configuration'),  );  foreach ($placements as $name => $info) {    $key = 'field_' . $name;    $weight = isset($info['weight']) ? $info['weight'] : 0;    $form['conf'][$info['region']][$key] = array(      '#weight' => $weight,      $key . '_name' => array(        '#markup' => !empty($info['title']) ? $info['title'] : $name,      ),      $key . '_region' => array(        '#type' => 'select',        '#options' => $regions,        '#default_value' => $info['region'],        '#attributes' => array(          'class' => array('field-region-select field-region-' . $info['region']),        ),      ),      $key . '_weight' => array(        '#type' => 'textfield',        '#default_value' => $weight,        '#size' => 3,        '#attributes' => array(          'class' => array('field-weight field-weight-' . $info['region']),        ),      ),    );    if (!$info['has_required']) {      $form['conf'][$info['region']][$key][$key . '_hidden'] = array(        '#type' => 'checkbox',        '#title' => t('Hide'),        '#default_value' => isset($info['hidden']) ? $info['hidden'] : FALSE,      );    }    if (isset($info['collapsed'])) {      $form['conf'][$info['region']][$key][$key . '_collapsed'] = array(        '#type' => 'checkbox',        '#title' => t('Show collapsed'),        '#default_value' => isset($info['collapsed']) ? $info['collapsed'] : FALSE,      );    }  }  $form['submit'] = array(    '#type' => 'submit',    '#value' => t('Save'),  );  return $form;}/** * Checks if a form element or any of it's children are required * * @param array $element * @return bool */function _nodeformcols_has_required($element) {  if (isset($element['#required']) && $element['#required']) {    return TRUE;  }  $children = element_children($element);  foreach ($children as $child) {    if (_nodeformcols_has_required($element[$child])) {      return TRUE;    }  }  return FALSE;}function _nodeformcols_configuration_form_after_build($form) {  drupal_add_js('misc/tableheader.js');  drupal_add_js(drupal_get_path('module', 'nodeformcols') . '/js/nodeformcols.js');  drupal_add_css(drupal_get_path('module', 'nodeformcols') . '/css/nodeformcols.admin.css');  $regions = nodeformcols_form_regions();  foreach ($regions as $region => $title) {    if (isset($form['conf'][$region]) && is_array($form['conf'][$region])) {      uasort($form['conf'][$region], "element_sort");    }    drupal_add_tabledrag('fields', 'match', 'sibling', 'field-region-select', 'field-region-' . $region, NULL, FALSE);    drupal_add_tabledrag('fields', 'order', 'sibling', 'field-weight', 'field-weight-' . $region);  }  return $form;}function nodeformcols_configuration_form_submit($form, $form_state) {  $values = $form_state['values'];  $type = $values['type'];  $placements = nodeformscols_field_placements($type, $form['#variant']);  nodeformcols_update_placements($type, $form['#variant'], $placements);  foreach ($placements as $name => &$opt) {    $field = 'field_' . $name;    $opt['region'] = $values[$field . '_region'];    $opt['weight'] = $values[$field . '_weight'];    if (isset($values[$field . '_hidden'])) {      $opt['hidden'] = $values[$field . '_hidden'];    }    if (isset($values[$field . '_collapsed'])) {      $opt['collapsed'] = $values[$field . '_collapsed'];    }  }  variable_set('nodeformscols_field_placements_' . $type .    '_' . $form['#variant'], $placements);}
 |