'Access groups',
'access callback' => 'user_access',
'access arguments' => array('manage simple access'),
'page callback' => 'drupal_get_form',
'page arguments' => array('simple_access_page_overview'),
'type' => MENU_NORMAL_ITEM,
'description' => 'Manage groups of users for node-specific access control.',
'file' => 'simple_access.admin.inc',
);
$items['admin/user/simple_access/list'] = array(
'title' => 'List',
'access callback' => 'user_access',
'access arguments' => array('manage simple access'),
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -8,
'file' => 'simple_access.admin.inc',
);
$items['admin/user/simple_access/add'] = array(
'title' => 'Add Group',
'page callback' => 'drupal_get_form',
'page arguments' => array('simple_access_group_form'),
'access callback' => 'user_access',
'access arguments' => array('manage simple access'),
'type' => MENU_LOCAL_TASK,
'weight' => -6,
'file' => 'simple_access.admin.inc',
);
$items['admin/user/simple_access/edit/%'] = array(
'title' => 'Edit Group',
'page callback' => 'drupal_get_form',
'page arguments' => array('simple_access_group_form', 4),
'access callback' => 'user_access',
'access arguments' => array('manage simple access'),
'type' => MENU_CALLBACK,
'file' => 'simple_access.admin.inc',
);
$items['admin/user/simple_access/delete/%'] = array(
'title' => 'Delete Group',
'page callback' => 'drupal_get_form',
'page arguments' => array('simple_access_delete_group_confirm', 4),
'access callback' => 'user_access',
'access arguments' => array('manage simple access'),
'type' => MENU_CALLBACK,
'file' => 'simple_access.admin.inc',
);
$items['admin/user/sa_profiles'] = array(
'title' => 'Access profiles',
'page callback' => 'drupal_get_form',
'page arguments' => array('simple_access_profile_list'),
'access callback' => 'user_access',
'access arguments' => array('manage simple access'),
'type' => MENU_NORMAL_ITEM,
'description' => 'Maintain access profiles',
'file' => 'simple_access.admin.inc',
);
$items['admin/user/sa_profiles/list'] = array(
'title' => 'List',
'access callback' => 'user_access',
'access arguments' => array('manage simple access'),
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => -9,
'file' => 'simple_access.admin.inc',
);
$items['admin/user/sa_profiles/add'] = array(
'title' => 'Add',
'page callback' => 'drupal_get_form',
'page arguments' => array('simple_access_profile_form', NULL),
'access callback' => 'user_access',
'access arguments' => array('manage simple access'),
'type' => MENU_LOCAL_TASK,
'file' => 'simple_access.admin.inc',
);
$items['admin/settings/simple_access'] = array(
'title' => 'Simple Access',
'page callback' => 'drupal_get_form',
'page arguments' => array('simple_access_settings_page'),
'access callback' => 'user_access',
'access arguments' => array('manage simple access'),
'type' => MENU_NORMAL_ITEM,
'description' => 'Configure which kinds of access (view, edit, delete) users with permission to use Simple Access can define for each node.',
'file' => 'simple_access.admin.inc',
);
$items['admin/user/sa_profiles/%/edit'] = array(
'title' => 'Edit Profile',
'page callback' => 'drupal_get_form',
'page arguments' => array('simple_access_profile_form', 3),
'access callback' => 'user_access',
'access arguments' => array('manage simple access'),
'type' => MENU_CALLBACK,
'file' => 'simple_access.admin.inc',
);
$items['admin/user/sa_profiles/%/delete'] = array(
'title' => 'Delete Profile',
'page callback' => 'drupal_get_form',
'page arguments' => array('simple_access_profile_delete_confirm', 3),
'access callback' => 'user_access',
'access arguments' => array('manage simple access'),
'type' => MENU_CALLBACK,
'file' => 'simple_access.admin.inc',
);
return $items;
}
/**
* Implementation of hook_perm().
*/
function simple_access_perm() {
return array('manage simple access', 'assign access to nodes', 'assign profiles to profiles', 'assign owner permissions');
}
/**
* Implementation of hook_nodeapi()
*/
function simple_access_nodeapi(&$node, $op) {
switch ($op) {
case 'prepare':
// Only use the defaults if this is a new node.
if (empty($node->nid)) {
$defaults = variable_get('simple_access_'. $node->type, array('simple_access' => array(), 'simple_access_profiles' => array(), 'simple_access_owner' => array()));
}
else {
$defaults = array('simple_access' => array(), 'simple_access_profiles' => array(), 'simple_access_owner' => array());
}
foreach ($defaults as $key => $value) {
if (!isset($node->{$key})) {
$node->{$key} = $value;
}
}
break;
case 'load':
if ($row = db_fetch_array(db_query('SELECT no.sa_view, no.sa_update, no.sa_delete FROM {simple_access_owner} no WHERE no.nid = %d', $node->nid))) {
$node->simple_access_owner = $row;
}
else {
$node->simple_access_owner = array('sa_view' => 0, 'sa_update' => 0, 'sa_delete' => 0);
}
$extra = array();
$result = db_query('SELECT na.gid, na.sa_view, na.sa_update, na.sa_delete FROM {simple_access_node} na WHERE na.nid = %d', $node->nid);
while ($grant = db_fetch_array($result)) {
$gid = $grant['gid'];
unset($grant['gid']);
$extra[$gid] = $grant;
}
$node->simple_access = $extra;
$result = db_query('SELECT pid FROM {simple_access_profiles_node} WHERE nid = %d', $node->nid);
while ($row = db_fetch_array($result)) {
$node->simple_access_profiles[] = $row['pid'];
}
break;
case 'update':
case 'insert':
if ($node->uid && ($node->simple_access_owner['sa_view'] || $node->simple_access_owner['sa_update'] || $node->simple_access_owner['sa_update'])) {
$node->simple_access_owner['nid'] = $node->nid;
drupal_write_record('simple_access_owner', $node->simple_access_owner, array('nid'));
if (!db_affected_rows()) {
drupal_write_record('simple_access_owner', $node->simple_access_owner);
}
}
else {
db_query('DELETE FROM {simple_access_owner} WHERE nid = %d', $node->nid);
}
db_query('DELETE FROM {simple_access_node} WHERE nid = %d', $node->nid);
if (isset($node->simple_access)) {
foreach ($node->simple_access as $gid => $access) {
if ($access['sa_view'] || $access['sa_update'] || $access['sa_delete']) {
$access['nid'] = $node->nid;
$access['gid'] = $gid;
drupal_write_record('simple_access_node', $access);
}
}
}
db_query('DELETE FROM {simple_access_profiles_node} WHERE nid = %d', $node->nid);
if (isset($node->simple_access_profiles)) {
foreach (array_filter($node->simple_access_profiles) as $pid) {
$data = array(
'nid' => $node->nid,
'pid' => $pid,
);
drupal_write_record('simple_access_profiles_node', $data);
}
}
break;
case 'delete':
db_query('DELETE FROM {simple_access_node} WHERE nid = %d', $node->nid);
db_query('DELETE FROM {simple_access_owner} WHERE nid = %d', $node->nid);
db_query('DELETE FROM {simple_access_profiles_node} WHERE nid = %d', $node->nid);
break;
}
}
/**
* Implementation of hook_node_access_records
*/
function simple_access_node_access_records($node) {
$records = array();
if (!empty($node->simple_access_profiles)) {
foreach (array_filter($node->simple_access_profiles) as $pid) {
$records[] = array(
'realm' => 'simple_access_profile',
'gid' => $pid,
'grant_view' => 1,
'grant_update' => 1,
'grant_delete' => 1,
'priority' => 0,
);
}
}
if (!empty($node->simple_access)) {
// loop through simple_access arrays from page submission
// $type is either 'view', 'update', or 'delete'
foreach ($node->simple_access as $gid => $access) {
if ($access['sa_view'] || $access['sa_update'] || $access['sa_delete']) {
$records[] = array(
'realm' => 'simple_access',
'gid' => $gid,
'grant_view' => $access['sa_view'],
'grant_update' => $access['sa_update'],
'grant_delete' => $access['sa_delete'],
'priority' => 0,
);
}
}
}
if ($node->uid && ($node->simple_access_owner['sa_view'] || $node->simple_access_owner['sa_update'] || $node->simple_access_owner['sa_delete'])) {
$records[] = array(
'realm' => 'simple_access_author',
'gid' => $node->uid,
'grant_view' => $node->simple_access_owner['sa_view'],
'grant_update' => $node->simple_access_owner['sa_update'],
'grant_delete' => $node->simple_access_owner['sa_delete'],
'priority' => 0,
);
}
return $records;
}
/**
* Implementation of hook_node_grants().
*
* @TODO implement to correcly return groups in all cases.
*/
function simple_access_node_grants($account, $op) {
$gids = simple_access_groups_from_roles(array_keys($account->roles));
$grants['simple_access'] = $gids;
if (in_array($op, array('view', 'update', 'delete')) && !empty($gids)) {
$result = db_query('SELECT DISTINCT pid FROM {simple_access_profiles_access} WHERE sa_'. $op .' = 1 AND gid in ('. implode(',', array_fill(0, count($gids), '%d')) .')', $gids);
while ($row = db_fetch_array($result)) {
$pids[] = $row['pid'];
}
if (!empty($pids)) {
$grants['simple_access_profiles'] = $pids;
}
}
$grants['simple_access_author'] = array($account->uid);
return $grants;
}
/**
* Implementation of hook_node_access_explain()
*/
function simple_access_node_access_explain($row) {
switch ($row->realm) {
case 'simple_access_author':
return t('Access for the content owner');
case 'simple_access':
$groups = simple_access_get_groups();
return t('Access restrictions for the "%group" group', array('%group' => $groups[$row->gid]['name']));
case 'simple_access_profile':
$groups = simple_access_get_groups();
$profiles = simple_access_get_profiles();
$profile = $profiles[$row->gid];
$message = t('Access restrictions for profile "%profile"
', array('%profile' => $profile['name']));
if (!empty($profile['access'])) {
foreach ($profile['access'] as $gid => $access) {
$message.= t(' "%group" group can @perm.', array('%group' => $groups[$gid]['name'], '@perm' => implode(', ', array_keys(array_filter($access)))));
}
}
$message.= '';
return $message;
}
}
function simple_access_form_alter(&$form, &$form_state, $form_id) {
// if this is a node form...
if (isset($form['type']['#value']) && $form['type']['#value'] .'_node_form' == $form_id) {
if ($simple_access_form = simple_access_form($form['#node'])) {
$form = array_merge($form, $simple_access_form);
if (module_exists('vertical_tabs')) {
$form['sa']['#group'] = 'additional_settings';
$form['sa']['#attached']['js']['vertical-tabs'] = drupal_get_path('module', 'simple_access') . '/simple_access.js';
}
}
}
}
function simple_access_form_node_type_form_alter(&$form, &$form_state) {
$type = $form['old_type']['#value'];
$default = variable_get('simple_access_'. $type, array('simple_access' => array(), 'simple_access_profiles' => array(), 'simple_access_owner' => array()));
$tmp_form = simple_access_form((object)$default, TRUE);
$form['simple_access'] = $tmp_form['sa'];
$form['simple_access']['simple_access']['owner']['#parents'] = array('simple_access', 'simple_access_owner');
$form['simple_access']['#tree'] = TRUE;
if (module_exists('vertical_tabs')) {
$form['simple_access']['#group'] = 'additional_settings';
$form['simple_access']['#attached']['js']['vertical-tabs'] = drupal_get_path('module', 'simple_access') . '/simple_access.js';
}
$form['#submit'][] = 'simple_access_node_type_submit';
}
function simple_access_node_type_submit(&$form, &$form_state) {
$op = isset($form_state['values']['op']) ? $form_state['values']['op'] : '';
$type = $form_state['values']['type'];
if ($op == t('Save content type')) {
variable_set('simple_access_'. $type, $form_state['values']['simple_access']);
}
}
function simple_access_theme() {
return array(
'simple_access_form' => array(
'arguments' => array('form' => NULL),
'file' => 'simple_access.theme.inc',
),
'simple_access_page_overview' => array(
'arguments' => array('form' => NULL),
'file' => 'simple_access.theme.inc',
),
'simple_access_profile_list' => array(
'arguments' => array('form' => NULL),
'file' => 'simple_access.theme.inc',
),
);
}
function simple_access_form($node, $admin = FALSE) {
// Get the array of checkbox options to use for each form element.
// If the "Show groups even when user is not a member" setting is
// enabled, or if the current user has 'administer nodes', let
// them choose from any of the SA groups.
$groups = simple_access_group_select();
$profiles = simple_access_get_profiles_select();
if (empty($groups) && empty($profiles) && !user_access('assign owner permissions')) {
return;
}
$user_groups = is_array($node->simple_access) ? array_filter($node->simple_access, '_simple_access_filter_access') : array();
$owner_priv = is_array($node->simple_access_owner) ? array_filter($node->simple_access_owner) : array();
// set up the outer fieldset
$form['sa'] = array(
'#title' => t('Access'),
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#collapsed' => empty($user_groups) && empty($node->simple_access_profiles) && empty($owner_priv),
'#access' => user_access('assign access to profiles') || user_access('assign access to nodes') || user_access('administer nodes'),
'#attributes' => array(
'class' => 'simple-access-settings',
),
'#weight' => (module_exists('content') && isset($form['type'])) ? content_extra_field_weight($form['type']['#value'], 'sa') : 20,
);
if (!empty($profiles)) {
$form['sa']['simple_access_profiles'] = array(
'#type' => 'checkboxes',
'#title' => t('Access profile'),
'#default_value' => $node->simple_access_profiles,
'#options' => $profiles,
'#access' => user_access('assign access to profiles') || user_access('administer nodes'),
);
}
if (!empty($groups) || user_access('assign owner permissions')) {
$form['sa']['simple_access'] = array(
'#tree' => TRUE,
'#weight' => 5,
'#access' => user_access('assign access to nodes') || user_access('administer nodes') || user_access('assign owner permissions'),
'#theme' => 'simple_access_form',
);
if ($admin) {
$form['sa']['simple_access']['#admin'] = TRUE;
}
// Load the owner perminisions.
$group = array(
'name' => t('Owner permissions'),
'access' => user_access('assign owner permissions') && isset($node->uid) && $node->uid,
);
$access = array('owner' => $node->simple_access_owner);
$form['sa']['simple_access']['owner'] = simple_access_form_row('owner', $group, $access, $admin);
$form['sa']['simple_access']['owner']['#parents'] = array('simple_access_owner');
// See what form elements we should include. If not configured,
// only enable the 'view' elements by default.
$variable = variable_get('sa_display', array('view' => 1));
foreach ($groups as $gid => $group) {
$form['sa']['simple_access'][$gid] = simple_access_form_row($gid, $group, $node->simple_access, $admin);
}
}
return $form;
}
function simple_access_form_row($gid, $group, $access, $admin = FALSE) {
if ($admin) {
$variable = array('view' => 1, 'update' => 1, 'delete' => 1);
}
else {
$variable = variable_get('sa_display', array(
'view' => 1, 'update' => 0, 'delete' => 0)
);
}
$defaults = array('sa_view' => NULL, 'sa_update' => NULL, 'sa_delete' => NULL);
if (empty($access[$gid])) {
$access[$gid] = $defaults;
}
else {
$access[$gid]+= $defaults;
}
$priv = $group['access'] || user_access('administer nodes');
$form = array(
'#access' => $priv,
);
if ($admin) {
$form['#admin'] = $admin;
}
$form['name'] = array(
'#value' => $group['name'],
'#access' => $priv,
);
$form['sa_view'] = array(
'#type' => 'checkbox',
'#default_value' => $access[$gid]['sa_view'],
'#access' => $priv && $variable['view'],
);
$form['sa_update'] = array(
'#type' => 'checkbox',
'#default_value' => $access[$gid]['sa_update'],
'#access' => $priv && $variable['update'],
);
$form['sa_delete'] = array(
'#type' => 'checkbox',
'#default_value' => $access[$gid]['sa_delete'],
'#access' => $priv && $variable['delete'],
);
return $form;
}
function simple_access_get_roles($gid) {
$roles = array();
$sql = db_query('SELECT rid FROM {simple_access_roles} WHERE gid = %d', $gid);
while ($row = db_fetch_object($sql)) {
$roles[] = $row->rid;
}
return $roles;
}
function simple_access_get_profiles_select() {
$profiles = simple_access_get_profiles();
return array_map('_simple_access_filter_profiles', $profiles);
}
function _simple_access_filter_profiles($a) {
return $a['name'];
}
function simple_access_get_profiles() {
$profiles = array();
$result = db_query('SELECT pid, name FROM {simple_access_profiles} ORDER BY weight, name');
while ($p = db_fetch_array($result)) {
$profiles[$p['pid']] = $p;
$profiles[$p['pid']]['access'] = array();
}
$result = db_query('SELECT pid, gid, sa_view, sa_update, sa_delete FROM {simple_access_profiles_access} ORDER BY pid');
while ($a = db_fetch_array($result)) {
if (isset($profiles[$a['pid']])) {
$profiles[$a['pid']]['access'][$a['gid']] = array(
'sa_view' => $a['sa_view'],
'sa_update' => $a['sa_update'],
'sa_delete' => $a['sa_delete'],
);
}
}
return $profiles;
}
function simple_access_get_groups() {
$groups = array();
$result = db_query('SELECT gid, name, weight FROM {simple_access_groups} ORDER BY weight, name');
while ($g = db_fetch_array($result)) {
$groups[$g['gid']]['name'] = $g['name'];
$groups[$g['gid']]['gid'] = $g['gid'];
$groups[$g['gid']]['weight'] = $g['weight'];
$groups[$g['gid']]['roles'] = simple_access_get_roles($g['gid']);
}
return $groups;
}
function simple_access_group_select() {
static $groups;
if (empty($groups)) {
global $user;
$default_access = user_access('administer nodes');
$groups = array();
$result = db_query('SELECT gid, name FROM {simple_access_groups} ORDER BY weight, name');
while ($group = db_fetch_array($result)) {
$groups[$group['gid']] = $group;
$groups[$group['gid']]['access'] = $default_access;
}
if (!$default_access) {
// return just groups for which user is a member
$roles = array_keys($user->roles);
$result = db_query('SELECT g.gid FROM {simple_access_groups} g INNER JOIN {simple_access_roles} r ON g.gid = r.gid WHERE r.rid IN ('. implode(',', array_fill(0, count($roles), '%d')) .') GROUP BY g.gid', $roles);
while ($group = db_fetch_array($result)) {
$groups[$group['gid']]['access'] = TRUE;
}
}
}
return $groups;
}
/**
* Get a list of group/grant ids based on a list of user roles
* $roles should be a linear list a role ids
*/
function simple_access_groups_from_roles($roles) {
// there probably should be some 'static' stuff going on here
// always return gid 0 just to be safe.
$gids = array();
$result = db_query('SELECT DISTINCT(gid) FROM {simple_access_roles} WHERE rid IN ('. implode(',', array_fill(0, count($roles), '%d')) .')', $roles);
while ($g = db_fetch_object($result)) {
$gids[] = $g->gid;
}
return $gids;
}
/**
*
*/
function simple_access_groups_check_user($groups) {
global $user;
$roles = array_keys($user->roles);
$roles[] = $user->uid ? DRUPAL_AUTHENTICATED_RID : DRUPAL_ANONYMOUS_RID;
$user_groups = simple_access_groups_from_roles($roles);
return array_intersect(array_filter($groups, $user_groups));
}
/**
* Save group of roles into the database
* $roles is an associative array of roles where the keys are role ids
* $name is the name of the group
* $gid is the group id
*
*/
function simple_access_save_group($edit) {
if (empty($edit['gid'])) {
drupal_write_record('simple_access_groups', $edit);
}
else {
drupal_write_record('simple_access_groups', $edit, array('gid'));
}
db_query('DELETE FROM {simple_access_roles} WHERE gid = %d', $edit['gid']);
if (is_array($edit['roles'])) {
foreach ($edit['roles'] as $key => $value) {
if ($value) {
$record = array('rid' => $key, 'gid' => $edit['gid']);
$s = drupal_write_record('simple_access_roles', $record);
$success = $success && $s;
}
}
}
return $success;
}
function simple_access_delete_profile($pid) {
db_query('DELETE FROM {simple_access_profiles} WHERE pid = %d', $pid);
db_query('DELETE FROM {simple_access_profiles_access} WHERE pid = %d', $pid);
db_query('DELETE FROM {simple_access_profiles_node} WHERE pid = %d', $pid);
}
function simple_access_delete_group($gid) {
db_query('DELETE FROM {simple_access_roles} WHERE gid = %d', $gid);
db_query('DELETE FROM {simple_access_groups} WHERE gid = %d', $gid);
db_query('DELETE FROM {simple_access_node} WHERE gid = %d', $gid);
}
/**
* Filter the access records for the current user
*/
function _simple_access_filter_access($a) {
$groups = simple_access_group_select();
return isset($a['gid']) && isset($groups[$a['gid']]['access']) && $groups[$a['gid']]['access'];
}
/**
* Implementation of hook_action_info()
*/
function simple_access_action_info() {
return array(
'simple_access_owner_grant' => array(
'type' => 'node',
'description' => t('Grant permissions to content owner'),
'configurable' => TRUE,
'hooks' => array(
'nodeapi' => array('insert', 'update'),
),
),
'simple_access_owner_revoke' => array(
'type' => 'node',
'description' => t('Revoke permissions from content owner'),
'configurable' => TRUE,
'hooks' => array(
'nodeapi' => array('insert', 'update'),
),
),
'simple_access_group_grant' => array(
'type' => 'node',
'description' => t('Grant permissions to groups'),
'configurable' => TRUE,
'hooks' => array(
'nodeapi' => array('insert', 'update'),
),
),
'simple_access_group_revoke' => array(
'type' => 'node',
'description' => t('Revoke permissions from groups'),
'configurable' => TRUE,
'hooks' => array(
'nodeapi' => array('insert', 'update'),
),
),
'simple_access_profile_enable' => array(
'type' => 'node',
'description' => t('Enable access profile'),
'configurable' => TRUE,
'hooks' => array(
'nodeapi' => array('insert', 'update'),
),
),
'simple_access_profile_disable' => array(
'type' => 'node',
'description' => t('Disable access profile'),
'configurable' => TRUE,
'hooks' => array(
'nodeapi' => array('insert', 'update'),
),
),
);
};
/**
* Configure grant content owner permissions
*/
function simple_access_owner_grant_form($settings = array()) {
$form = array();
$form['sa_owner_permissions'] = array(
'#type' => 'checkboxes',
'#title' => t('Grant owner permissions'),
'#default_value' => empty($settings['sa_owner_permissions']) ? array() : $settings['sa_owner_permissions'],
'#options' => array(
'sa_view' => t('View'),
'sa_update' => t('Update'),
'sa_delete' => t('Delete'),
),
'#description' => t('Select permissions to grant for the content owner'),
);
return $form;
}
function simple_access_owner_grant_submit($form, &$form_state) {
$settings = array('sa_owner_permissions' => $form_state['values']['sa_owner_permissions']);
return $settings;
}
/**
* Action to grant permissions to the owner
*/
function simple_access_owner_grant($node, $conf) {
foreach (array_filter($conf['sa_owner_permissions']) as $option) {
$node->simple_access_owner[$option] = 1;
}
return array('node' => $node);
}
/**
* Configure revoke content owner permissions
*/
function simple_access_owner_revoke_form($settings = array()) {
$form = array();
$form['sa_owner_permissions'] = array(
'#type' => 'checkboxes',
'#title' => t('Revoke owner permissions'),
'#default_value' => empty($settings['sa_owner_permissions']) ? array() : $settings['sa_owner_permissions'],
'#options' => array(
'sa_view' => t('View'),
'sa_update' => t('Update'),
'sa_delete' => t('Delete'),
),
'#description' => t('Select permissions to revoke for the content owner'),
);
return $form;
}
function simple_access_owner_revoke_submit($form, &$form_state) {
$settings = array('sa_owner_permissions' => $form_state['values']['sa_owner_permissions']);
return $settings;
}
/**
* Action to grant permissions to the owner
*/
function simple_access_owner_revoke($node, $conf) {
foreach (array_filter($conf['sa_owner_permissions']) as $option) {
$node->simple_access_owner[$option] = 0;
}
return array('node' => $node);
}
/**
* Configure grant group permissions
*/
function simple_access_group_grant_form($settings = array()) {
$form = array();
$form['sa_group_permissions'] = array(
'#tree' => TRUE,
'#theme' => 'simple_access_form',
'#admin' => TRUE,
);
$groups = simple_access_get_groups();
foreach ($groups as $gid => $group) {
$form['sa_group_permissions'][$gid]['name'] = array(
'#value' => $group['name'],
);
$form['sa_group_permissions'][$gid]['sa_view'] = array(
'#type' => 'checkbox',
'#default_value' => $settings['sa_group_permissions'][$gid]['sa_view'],
);
$form['sa_group_permissions'][$gid]['sa_update'] = array(
'#type' => 'checkbox',
'#default_value' => $settings['sa_group_permissions'][$gid]['sa_update'],
);
$form['sa_group_permissions'][$gid]['sa_delete'] = array(
'#type' => 'checkbox',
'#default_value' => $settings['sa_group_permissions'][$gid]['sa_delete'],
);
}
return $form;
}
function simple_access_group_grant_submit($form, &$form_state) {
$settings = array('sa_group_permissions' => $form_state['values']['sa_group_permissions']);
return $settings;
}
/**
* Action to grant permissions to the owner
*/
function simple_access_group_grant($node, $conf) {
foreach ($conf['sa_group_permissions'] as $gid => $group) {
foreach (array_keys(array_filter($group)) as $option) {
$node->simple_access[$gid][$option] = 1;
}
}
return array('node' => $node);
}
/**
* Configure revoke group permissions
*/
function simple_access_group_revoke_form($settings = array()) {
$form = array();
$form['sa_group_permissions'] = array(
'#tree' => TRUE,
'#theme' => 'simple_access_form',
'#admin' => TRUE,
);
$groups = simple_access_get_groups();
foreach ($groups as $gid => $group) {
$form['sa_group_permissions'][$gid]['name'] = array(
'#value' => $group['name'],
);
$form['sa_group_permissions'][$gid]['sa_view'] = array(
'#type' => 'checkbox',
'#default_value' => $settings['sa_group_permissions'][$gid]['sa_view'],
);
$form['sa_group_permissions'][$gid]['sa_update'] = array(
'#type' => 'checkbox',
'#default_value' => $settings['sa_group_permissions'][$gid]['sa_update'],
);
$form['sa_group_permissions'][$gid]['sa_delete'] = array(
'#type' => 'checkbox',
'#default_value' => $settings['sa_group_permissions'][$gid]['sa_delete'],
);
}
return $form;
}
function simple_access_group_revoke_submit($form, &$form_state) {
$settings = array('sa_group_permissions' => $form_state['values']['sa_group_permissions']);
return $settings;
}
/**
* Action to revoke permissions to the owner
*/
function simple_access_group_revoke($node, $conf) {
foreach ($conf['sa_group_permissions'] as $gid => $group) {
foreach (array_keys(array_filter($group)) as $option) {
$node->simple_access[$gid][$option] = 0;
}
}
return array('node' => $node);
}
/**
* Configure enable security profile
*/
function simple_access_profile_enable_form($settings = array()) {
$form = array();
$form['sa_profiles'] = array(
'#type' => 'checkboxes',
'#title' => t('Access profiles'),
'#default_value' => empty($settings['sa_profiles']) ? array() : $settings['sa_profiles'],
'#options' => simple_access_get_profiles_select(),
'#description' => t('Select permissions to grant for the content owner'),
);
return $form;
}
function simple_access_profile_enable_submit($form, &$form_state) {
$settings = array('sa_profiles' => $form_state['values']['sa_profiles']);
return $settings;
}
/**
* Action enable access profile
*/
function simple_access_profile_enable($node, $conf) {
foreach (array_filter($conf['sa_profiles']) as $pid) {
if (!in_array($pid, $node->simple_access_profiles)) {
$node->simple_access_profiles[] = $pid;
}
}
return array('node' => $node);
}
/**
* Configure disable security profile
*/
function simple_access_profile_disable_form($settings = array()) {
$form = array();
$form['sa_profiles'] = array(
'#type' => 'checkboxes',
'#title' => t('Access profiles'),
'#default_value' => empty($settings['sa_profiles']) ? array() : $settings['sa_profiles'],
'#options' => simple_access_get_profiles_select(),
'#description' => t('Select permissions to grant for the content owner'),
);
return $form;
}
function simple_access_profile_disable_submit($form, &$form_state) {
$settings = array('sa_profiles' => $form_state['values']['sa_profiles']);
return $settings;
}
/**
* Action to disable access profile
*/
function simple_access_profile_disable($node, $conf) {
foreach (array_filter($conf['sa_profiles']) as $pid) {
if (in_array($pid, $node->simple_access_profiles)) {
unset($node->simple_access_profiles[array_search($pid, $node->simple_access_profiles)]);
}
}
return array('node' => $node);
}
/**
* Implementation of hook_views_api().
*/
function simple_access_views_api() {
return array('api' => 2.0);
}
/**
* Implementation of hook_content_extra_fields().
*/
function simple_access_content_extra_fields($type_name) {
$fields['simple_access'] = array(
'label' => t('Simple Access'),
'description' => t('Simple Access module form.'),
'weight' => 20,
);
return $fields;
}