You are here

function override_node_options_form_alter in Override Node Options 6

Same name and namespace in other branches
  1. 8.3 override_node_options.module \override_node_options_form_alter()
  2. 8 override_node_options.module \override_node_options_form_alter()
  3. 8.2 override_node_options.module \override_node_options_form_alter()
  4. 5 override_node_options.module \override_node_options_form_alter()
  5. 7 override_node_options.module \override_node_options_form_alter()

Implements hook_form_alter().

File

./override_node_options.module, line 49
Allow users to override the default publishing options for nodes they can edit without giving them the 'administer nodes' permission.

Code

function override_node_options_form_alter(&$form, $form_state, $form_id) {
  if (isset($form['type']['#value']) && $form['type']['#value'] . '_node_form' == $form_id && !user_access('administer nodes')) {

    // Get a copy of the current node object.
    $node = $form['#node'];

    // Core doesn't include the revision fieldset if the user does not have
    // access to it unlike all the other fieldsets, so we have to re-create it.
    // @see http://drupal.org/node/668806
    $form['revision_information'] = array(
      '#type' => 'fieldset',
      '#title' => t('Revision information'),
      '#collapsible' => TRUE,
      '#collapsed' => !$node->revision,
      '#weight' => 20,
    );
    $form['revision_information']['revision'] = array(
      '#type' => 'checkbox',
      '#title' => t('Create new revision'),
      '#default_value' => $node->revision,
      '#access' => user_access('administer nodes') || user_access('override ' . $node->type . ' revision option'),
    );
    $form['revision_information']['log'] = array(
      '#type' => 'textarea',
      '#title' => t('Log message'),
      '#default_value' => isset($node->log) ? $node->log : '',
      '#rows' => 2,
      '#description' => t('An explanation of the additions or updates being made to help other authors understand your motivations.'),
      '#access' => user_access('administer nodes') || user_access('enter ' . $node->type . ' revision log entry'),
    );
    $form['revision_information']['#access'] = $form['revision_information']['log']['#access'] || $form['revision_information']['revision']['#access'];

    // Add access to the 'Authoring information' fieldset.
    $form['author']['name']['#access'] = user_access('override ' . $node->type . ' authored by option');
    $form['author']['date']['#access'] = user_access('override ' . $node->type . ' authored on option');
    $form['author']['#access'] |= override_node_options_element_children_access($form['author']);

    // Add access to the 'Publishing options' fieldset.
    $form['options']['status']['#access'] = user_access('override ' . $node->type . ' published option');
    $form['options']['promote']['#access'] = user_access('override ' . $node->type . ' promote to front page option');
    $form['options']['sticky']['#access'] = user_access('override ' . $node->type . ' sticky option');
    $form['options']['#access'] |= override_node_options_element_children_access($form['options']);

    // Add access to the 'Comment settings' fieldset.
    if (module_exists('comment') && isset($form['comment_settings']) && !user_access('administer comments')) {
      $form['comment_settings']['#access'] = user_access('override ' . $node->type . ' comment settings');
    }

    // Add extra validation and processing if the user does not have the
    // 'administer nodes' permission since it would be otherwise skipped by core.
    if ($form['author']['#access']) {
      $form['#validate'][] = 'override_node_options_validate_node';
    }
    if ($form['author']['name']['#access']) {
      $form['#submit'][] = 'override_node_options_submit_node';
    }
  }
  if (isset($form['type']['#value']) && $form['type']['#value'] . '_node_form' == $form_id) {
    $form['options']['#collapsible'] = variable_get('override_node_options_pocollapsible', 1);
    $form['options']['#collapsed'] = variable_get('override_node_options_pocollapsed', 1);
    $form['author']['#collapsible'] = variable_get('override_node_options_aicollapsible', 1);
    $form['author']['#collapsed'] = variable_get('override_node_options_aicollapsed', 1);
    if (module_exists('upload') && isset($form['attachments'])) {
      $form['attachments']['#collapsible'] = variable_get('override_node_options_facollapsible', 1);
      $form['attachments']['#collapsed'] = variable_get('override_node_options_facollapsed', 1);
    }
    if (module_exists('scheduler') && isset($form['scheduler_settings'])) {
      $form['scheduler_settings']['#collapsible'] = variable_get('override_node_options_sscollapsible', 1);
      $form['scheduler_settings']['#collapsed'] = variable_get('override_node_options_sscollapsed', 1);
    }
  }
}