'admin/settings/multi_logic_access', 'title' => t('Multi Logic Access'), 'callback' => 'drupal_get_form', 'callback arguments' => array('multi_logic_access_settings_form'), 'access' => user_access('administer site configuration'), ); $items[] = array( 'path' => 'admin/settings/multi_logic_access/settings', 'title' => t('Configure multi logic access'), 'type' => MENU_DEFAULT_LOCAL_TASK, ); } return $items; } /** * Generate multi_logic access UI form. */ function multi_logic_access_settings_form($theme = NULL) { global $theme_key, $custom_theme, $user; $uid = $user->uid; // Get whatever is stored in multi_logic table. $existing = array(); $result = db_query("SELECT * FROM {multi_logic_access}"); while ($row = db_fetch_object($result)) { $existing[$row->realm] = $row; } // Get all rule realms from node_access table. $result = db_query("SELECT DISTINCT realm FROM {node_access}"); while ($row = db_fetch_object($result)) { $rules[] = $row->realm; } // Get all rule realms from modules. User doing this should have grants in all modules affected. $op = 'view'; $mrules = node_access_grants($op, $uid); foreach ($mrules as $realm => $grants) { $rules[] = $realm; } // Get only unique values $rules = array_unique($rules); // Sort the rule realms asort($rules); $form['#tree'] = TRUE; foreach ($rules as $realm) { $form[$realm]['checkbox'] = array('#type' => 'checkbox', '#default_value' => (isset($existing[$realm]->realm) ? 1 : 0)); $form[$realm]['realm'] = array('#type' => 'textfield', '#size' => 25, '#disabled' => TRUE, '#value' => check_plain($realm), '#default_value' => $realm); $form[$realm]['group'] = array('#type' => 'textfield', '#size' => 5, '#default_value' => (isset($existing[$realm]->groupname) ? $existing[$realm]->groupname : '') ); $form[$realm]['logic'] = array('#type' => 'select', '#default_value' => (isset($existing[$realm]->logic) ? $existing[$realm]->logic : 'AND'), '#options' => array('AND' => 'AND', 'OR' => 'OR') ); $form[$realm]['weight'] = array('#type' => 'select', '#default_value' => (isset($existing[$realm]->weight) ? $existing[$realm]->weight : '0'), '#options' => array('0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9') ); $form[$realm]['check'] = array('#type' => 'select', '#default_value' => (isset($existing[$realm]->checkstatus) ? $existing[$realm]->checkstatus : '0'), '#options' => array('0' => '0', '1' => '1') ); } $form['submit'] = array('#type' => 'submit', '#value' => t('Save changes')); return $form; } /** * Theme function to render the table for the multi_logic_access_roles_multi_logic * multi_logic access UI */ function theme_multi_logic_access_settings_form($form) { $output .= "\n