You are here

function override_node_options_settings_form_submit in Override Node Options 7

Submit handler for settings form.

1 string reference to 'override_node_options_settings_form_submit'
override_node_options_settings_form in ./override_node_options.module
Settings form.

File

./override_node_options.module, line 155
Main module file for override_node_options.

Code

function override_node_options_settings_form_submit(&$form, &$form_state) {

  // Get old perms to compare.
  $old_perms = variable_get('override_node_options_permissions', array(
    'general',
    'specific',
  ));
  $new_perms = $form_state['values']['override_node_options_permissions'];

  // Clean up saved permissions.
  $role_names = user_roles();
  $revoke = array();
  $alert = FALSE;
  if (!in_array('specific', $new_perms, TRUE) && in_array('specific', $old_perms, TRUE)) {
    $alert = TRUE;
    $permissions = array();
    foreach (node_permissions_get_configured_types() as $type) {
      $permissions += override_node_options_list_permissions($type);
    }
    foreach ($permissions as $permission => $description) {
      $revoke[$permission] = FALSE;
    }

    // Be sure to clear the cache.
    cache_clear_all();
  }
  if (!in_array('general', $new_perms, TRUE) && in_array('general', $old_perms, TRUE)) {
    $alert = TRUE;
    $revoke = array(
      'override all published option' => FALSE,
      'override all promote to front page option' => FALSE,
      'override all sticky option' => FALSE,
      'override all revision option' => FALSE,
      'enter all revision log entry' => FALSE,
      'override all authored on option' => FALSE,
      'override all authored by option' => FALSE,
    );
    if (module_exists('comment')) {
      $revoke['override all comment setting option'] = FALSE;
    }
  }

  // Any specific grants not used anymore need to be deleted.
  if (!empty($revoke)) {
    foreach ($role_names as $rid => $name) {
      user_role_change_permissions($rid, $revoke);
    }
  }

  // Set a helpful message.
  $message = 'Configuration saved.';
  $arguments = array();
  $status = 'status';
  if ($alert) {
    if (user_access('administer permissions')) {
      $arguments = array(
        '!permissions' => l(t('the permissions page'), 'admin/config/people/permissions', array(
          'fragment' => 'module-override_node_options',
        )),
      );
      $message .= t('Please visit !permissions and double check access.');
      $status = 'warning';
    }
    else {
      $message .= t('Please visit the permissions page and double check access.');
    }
  }
  drupal_set_message(t($message, $arguments), $status);
}