View source
<?php
function nodeaccess_userreference_perm() {
return array(
'administer node access user reference',
);
}
function nodeaccess_userreference_menu() {
$items = array();
$items['admin/settings/nodeaccess_userreference'] = array(
'title' => 'Node access user reference settings',
'description' => t('Configure Node Access User Reference.'),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'nodeaccess_userreference_admin_settings',
),
'access arguments' => array(
'administer site configuration',
),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function nodeaccess_userreference_admin_settings() {
$form['nodeaccess_userreference_priority'] = array(
'#type' => 'weight',
'#title' => t('Set node grants priority for Node Access User Reference'),
'#default_value' => variable_get('nodeaccess_userreference_priority', 0),
'#description' => t('If you are only using this access control module, you can safely ignore this.
If you are using multiple access control modules you can adjust the priority of this module.'),
);
$form['#submit'][] = 'nodeaccess_userreference_admin_settings_submit';
return system_settings_form($form);
}
function nodeaccess_userreference_node_grants($account, $op) {
$grants = array();
$grants['nodeaccess_userreference'][] = $account->uid;
if (!empty($grants)) {
return $grants;
}
return NULL;
}
function nodeaccess_userreference_form_content_field_edit_form_alter(&$form, $form_state) {
if ($form['#field']['type'] == "userreference") {
$variable = 'nodeaccess_userreference_' . $form['#field']['field_name'] . '_' . $form['#field']['type_name'];
$data = variable_get($variable, array(
'view' => 0,
'update' => 0,
'delete' => 0,
));
$form['widget']['nodeaccess_userreference_view'] = array(
'#type' => 'checkbox',
'#title' => t('Grant "view" node access to user'),
'#default_value' => $data['view'],
'#description' => t('Give the referenced user access to view the node, if they cannot already do so.'),
'#weight' => 42,
);
$form['widget']['nodeaccess_userreference_update'] = array(
'#type' => 'checkbox',
'#title' => t('Grant "edit" node access to user'),
'#default_value' => $data['update'],
'#description' => t('Give the referenced user access to edit the node, if they cannot already do so.'),
'#weight' => 43,
);
$form['widget']['nodeaccess_userreference_delete'] = array(
'#type' => 'checkbox',
'#title' => t('Grant "delete" node access to user'),
'#default_value' => $data['delete'],
'#description' => t('Give the referenced user access to delete the node, if they cannot already do so.'),
'#weight' => 44,
);
$form['#submit'][] = 'nodeaccess_userreference_content_field_edit_form_submit';
}
}
function nodeaccess_userreference_content_field_edit_form_submit($form, &$form_state) {
$variable = 'nodeaccess_userreference_' . $form_values['field_name'] . '_' . $form_values['type_name'];
$data = array(
'view' => $form_values['nodeaccess_userreference_view'],
'update' => $form_values['nodeaccess_userreference_update'],
'delete' => $form_values['nodeaccess_userreference_delete'],
);
variable_set($variable, $data);
}
function nodeaccess_userreference_node_access_records($node) {
$grants = array();
$info = content_fields(NULL, $node->type);
$priority = variable_get('nodeaccess_userreference_priority', 0);
if (is_array($info)) {
foreach ($info as $field) {
if ($field['type'] == 'userreference') {
$variable = 'nodeaccess_userreference_' . $field['field_name'] . '_' . $field['type_name'];
$data = variable_get($variable, array(
'view' => 0,
'update' => 0,
'delete' => 0,
));
if (($data['view'] || $data['update'] || $data['delete']) && is_array($node->{$field}['field_name'])) {
foreach ($node->{$field}['field_name'] as $userreference) {
$uid =& $userreference['uid'];
$grants[$uid] = array(
'realm' => 'nodeaccess_userreference',
'gid' => $uid,
'priority' => $priority,
);
if ($data['view']) {
$grants[$uid]['grant_view'] = 1;
}
if ($data['update']) {
$grants[$uid]['grant_update'] = 1;
}
if ($data['delete']) {
$grants[$uid]['grant_delete'] = 1;
}
}
}
}
}
}
if (!empty($grants)) {
return $grants;
}
return NULL;
}