function _forum_access_form_submit in Forum Access 6
Same name and namespace in other branches
- 7 forum_access.admin.inc \_forum_access_form_submit()
1 string reference to '_forum_access_form_submit'
- _forum_access_forum_form in ./
forum_access.admin.inc - Rewrite the forum administration page with our new access rules.
File
- ./
forum_access.admin.inc, line 527 - forum_access.admin.inc
Code
function _forum_access_form_submit($form, &$form_state) {
$access = $form_state['values']['forum_access'];
// shortcut
// Save template choice:
$template_tid = reset($access['template']['taxonomy']);
if ($access['template']['select_by_default']) {
variable_set('forum_access_default_template_tid', $template_tid);
}
elseif (variable_get('forum_access_default_template_tid', 0) == $template_tid) {
variable_del('forum_access_default_template_tid');
}
if ($access['template']['load_for_new']) {
variable_set('forum_access_new_template_tid', $template_tid);
}
elseif (variable_get('forum_access_new_template_tid', 0) == $template_tid) {
variable_del('forum_access_new_template_tid');
}
module_load_include('node.inc', 'forum_access');
$moderator_rid = _forum_access_get_moderator_rid(TRUE);
// create the moderators role if it doesn't exist
// check for changes
$is_changed = $is_new = strpos($_GET['q'], 'admin/content/forum/add/') === 0;
$is_changed = $is_changed || !empty($access['force_update']);
$form_initial_values = $form;
// avoid Coder warning
$form_initial_values = $form_initial_values['forum_access'];
foreach (array(
'view',
'create',
'update',
'delete',
) as $grant_type) {
if (isset($form_initial_values[$grant_type])) {
$defaults = $form_initial_values[$grant_type]['#default_value'];
$defaults = array_flip($defaults);
foreach ($access[$grant_type] as $rid => $checked) {
$is_changed = $is_changed || empty($form_initial_values[$grant_type][$rid]['#disabled']) && !empty($checked) != isset($defaults[$rid]);
}
}
}
if (!$is_changed && $access['acl']['user_list'] == $form_initial_values['acl']['user_list']['#default_value'] && (empty($fa_values['interference']) || $access['interference']['advanced']['priority'] == $form_initial_values['interference']['advanced']['priority']['#default_value'])) {
drupal_set_message(t('The content access permissions are unchanged.'));
return;
}
$tid = $form_state['values']['tid'];
db_query("DELETE FROM {forum_access} WHERE tid = %d", $tid);
$fa_priority = isset($access['interference']['advanced']['priority']) ? $access['interference']['advanced']['priority'] : 0;
if (array_key_exists('acl', $access)) {
$moderators = unserialize($access['acl']['user_list']);
acl_save_form($access['acl'], $fa_priority);
}
$permissions = _forum_access_get_role_permissions();
foreach ($access['view'] as $rid => $checked) {
if ($rid == $moderator_rid) {
continue;
}
if (isset($permissions[$rid]['administer nodes'])) {
// We prefer not to save records for node administrators, because these have access anyway.
if (isset($permissions[$rid]['administer forums']) && $access['view'][$rid]) {
// For forum administrators, View needs to be saved, ...
}
else {
// ... otherwise forget View.
$access['view'][$rid] = FALSE;
}
if ($access['view'][$rid] || $access['create'][$rid]) {
db_query("INSERT INTO {forum_access} (tid, rid, grant_view, grant_update, grant_delete, grant_create, priority) VALUES (%d, %d, %d, %d, %d, %d, %d)", $tid, $rid, !empty($access['view'][$rid]), 0, 0, !empty($access['create'][$rid]), $fa_priority);
}
}
else {
db_query("INSERT INTO {forum_access} (tid, rid, grant_view, grant_update, grant_delete, grant_create, priority) VALUES (%d, %d, %d, %d, %d, %d, %d)", $tid, $rid, (bool) $checked, !empty($access['update'][$rid]), !empty($access['delete'][$rid]), !empty($access['create'][$rid]), $fa_priority);
}
}
$tr = 't';
$link = l($tr('edit'), 'admin/content/forum/edit/forum/' . $tid);
watchdog('access', 'Changed grants for %forum forum.', array(
'%forum' => $form_state['values']['name'],
), WATCHDOG_NOTICE, $link);
if (!$is_new && $form_state['values']['form_id'] != 'forum_form_container') {
if (!isset($access['update_choice']) || $access['update_choice'] == 2) {
node_access_needs_rebuild(TRUE);
}
elseif ($access['update_choice'] == 0) {
// update immediately (but use the batch functions anyway
$save_redirect = $form_state['redirect'];
$form_state['redirect'] = $_GET['q'];
$context = array();
$pending_error_messages = drupal_get_messages('error', FALSE);
$our_error_message_index = isset($pending_error_messages['error']) ? count($pending_error_messages['error']) : 0;
_forum_access_update_batch_finished(FALSE, array(), array());
// add our error message (in case we die underway)
_forum_access_update_batch_operation($tid, 999999, 1, $context);
$pending_error_messages = drupal_get_messages('error', TRUE);
// still alive, get and clear all 'error' messages
unset($pending_error_messages['error'][$our_error_message_index]);
// remove our error message
foreach ($pending_error_messages['error'] as $message) {
// replay any others
drupal_set_message($message, 'error');
}
_forum_access_update_batch_finished(TRUE, array(), array());
$form_state['redirect'] = $save_redirect;
}
else {
// mass update in batch mode, modeled after node.module
$limit = $access['update_limit'];
$count = db_result(db_query("SELECT COUNT(DISTINCT n.nid) FROM {node} n INNER JOIN {term_node} tn ON tn.vid = n.vid WHERE tn.tid = %d", $tid));
$batch = array(
'title' => t('Updating content access permissions'),
'file' => drupal_get_path('module', 'forum_access') . '/forum_access.admin.inc',
'operations' => array(
array(
'_forum_access_update_batch_operation',
array(
$tid,
$limit,
$count,
),
),
),
'finished' => '_forum_access_update_batch_finished',
);
batch_set($batch);
}
}
variable_del('forum_access_rids');
// clear cache
}