nodeaccess_userreference.module in Node access user reference 7.2
The Node access user reference module.
File
nodeaccess_userreference.moduleView source
<?php
/**
* @file
* The Node access user reference module.
*/
/**
* Implements hook_menu().
*/
function nodeaccess_userreference_menu() {
$items = array();
$items['admin/config/nodeaccess_userreference'] = array(
'title' => 'Node access user reference',
'description' => '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;
}
/**
* System settings form for Node access user reference.
*/
function nodeaccess_userreference_admin_settings($form, &$form_state) {
$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['nodeaccess_userreference_author_view'] = array(
'#type' => 'checkbox',
'#title' => t('Grant <em>view</em> access to node authors'),
'#default_value' => variable_get('nodeaccess_userreference_author_view', 1),
'#description' => t('Grants <em>view</em> access to authors. Use this if not using other node access modules to set author access.'),
);
$form['nodeaccess_userreference_author_update'] = array(
'#type' => 'checkbox',
'#title' => t('Grant <em>edit</em> access to node authors'),
'#default_value' => variable_get('nodeaccess_userreference_author_update', 1),
'#description' => t('Grants <em>edit</em> access to authors. Use this if not using other node access modules to set author access.'),
);
$form['nodeaccess_userreference_author_delete'] = array(
'#type' => 'checkbox',
'#title' => t('Grant <em>delete</em> access to node authors'),
'#default_value' => variable_get('nodeaccess_userreference_author_delete', 1),
'#description' => t('Grants <em>delete</em> access to authors. Use this if not using other node access modules to set author access.'),
);
// Add additional submit processing.
$form['#submit'][] = 'nodeaccess_userreference_admin_settings_submit';
return system_settings_form($form);
}
/**
* Submit function for the system settings form for nodeaccess_userreference.
*/
function nodeaccess_userreference_admin_settings_submit() {
node_access_needs_rebuild(TRUE);
}
/**
* Implements hook_node_grants().
*/
function nodeaccess_userreference_node_grants($account, $op) {
$grants = array();
$grants['nodeaccess_userreference'][] = $account->uid;
$grants['nodeaccess_userreference_author'][] = $account->uid;
return $grants;
}
/**
* Implements hook_form-FORM-ID_alter().
*/
function nodeaccess_userreference_form_field_ui_field_edit_form_alter(&$form, $form_state) {
if ($form['#field']['type'] == "user_reference") {
$data = nodeaccess_userreference_field_settings($form['#field']['field_name']);
$form['field']['settings']['nodeaccess_userreference'] = array(
'#type' => 'fieldset',
'#title' => t('Node access user reference'),
);
$form['field']['settings']['nodeaccess_userreference']['view'] = array(
'#type' => 'checkbox',
'#title' => t('Grant <em>view</em> 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.'),
);
$form['field']['settings']['nodeaccess_userreference']['update'] = array(
'#type' => 'checkbox',
'#title' => t('Grant <em>edit</em> 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.'),
);
$form['field']['settings']['nodeaccess_userreference']['delete'] = array(
'#type' => 'checkbox',
'#title' => t('Grant <em>delete</em> 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.'),
);
$form['#submit'][] = 'nodeaccess_userreference_form_field_ui_field_edit_form_submit';
}
}
/**
* Extra submit function for User reference field config.
*/
function nodeaccess_userreference_form_field_ui_field_edit_form_submit($form, &$form_state) {
$data =& $form_state['values']['field']['settings']['nodeaccess_userreference'];
$field_name =& $form_state['values']['instance']['field_name'];
nodeaccess_userreference_field_settings($field_name, $data);
$type =& $form_state['values']['instance']['bundle'];
$nodes = node_load_multiple(NULL, array(
'type' => $type,
));
if ($nodes) {
// Because the field settings have changed we should prompt for a full rebuild.
node_access_needs_rebuild(TRUE);
}
}
/**
* Implements hook_node_access_records().
*/
function nodeaccess_userreference_node_access_records($node) {
$grants = array();
$bundles = field_info_instances('node');
$priority = variable_get('nodeaccess_userreference_priority', 0);
foreach ($bundles as $fields) {
foreach ($fields as $field) {
if ($field['widget']['module'] == 'user_reference') {
$data = nodeaccess_userreference_field_settings($field['field_name']);
if (!empty($data) && !empty($node->{$field}['field_name'])) {
foreach ((array) $node->{$field}['field_name'] as $language) {
foreach ($language as $userreference) {
if ($userreference['uid']) {
$uid =& $userreference['uid'];
$grants[] = array(
'realm' => 'nodeaccess_userreference',
'gid' => $uid,
'priority' => $priority,
'grant_view' => $data['view'],
'grant_update' => $data['update'],
'grant_delete' => $data['delete'],
);
}
}
}
}
}
}
}
if (!empty($grants)) {
// Store author grants according to configuration.
$grant_view = variable_get('nodeaccess_userreference_author_view', 1);
$grant_update = variable_get('nodeaccess_userreference_author_update', 1);
$grant_delete = variable_get('nodeaccess_userreference_author_delete', 1);
if ($grant_view || $grant_update || $grant_delete) {
$grants[] = array(
'realm' => 'nodeaccess_userreference_author',
'gid' => $node->uid,
'priority' => $priority,
'grant_view' => $grant_view,
'grant_update' => $grant_update,
'grant_delete' => $grant_delete,
);
}
return $grants;
}
return NULL;
}
/**
* Set and get nodeaccess userreference field settings.
*
* @param $type_name
* The node type.
* @param $field_name
* The name of the field.
* @param $variable
* If set will update the value of the settings for this field.
* @return
* The stored or updated value of the settings for this field.
*/
function nodeaccess_userreference_field_settings($field_name, $variable = NULL) {
$data = variable_get('nodeaccess_userreference', NULL);
if (isset($variable)) {
$data[$field_name] = $variable;
variable_set('nodeaccess_userreference', $data);
}
if (isset($data[$field_name])) {
return $data[$field_name];
}
}
/**
* Implements hook_node_access_explain().
*
* This gives the Devel module nice information to display when
* debugging node grants.
*/
function nodeaccess_userreference_node_access_explain($row) {
if (in_array($row->realm, array(
'nodeaccess_userreference',
'nodeaccess_userreference_author',
))) {
foreach (array(
'view',
'update',
'delete',
) as $op) {
$gop = 'grant_' . $op;
if (!empty($row->{$gop})) {
$ops[] = $op;
}
}
$account = user_load($row->gid);
$do = implode('/', $ops);
switch ($row->realm) {
case 'nodeaccess_userreference':
return t('Referenced user %name may !do this node', array(
'%name' => $account->name,
'!do' => $do,
));
case 'nodeaccess_userreference_author':
return t('Node author %name may !do this node', array(
'%name' => $account->name,
'!do' => $do,
));
}
}
}
Functions
Name![]() |
Description |
---|---|
nodeaccess_userreference_admin_settings | System settings form for Node access user reference. |
nodeaccess_userreference_admin_settings_submit | Submit function for the system settings form for nodeaccess_userreference. |
nodeaccess_userreference_field_settings | Set and get nodeaccess userreference field settings. |
nodeaccess_userreference_form_field_ui_field_edit_form_alter | Implements hook_form-FORM-ID_alter(). |
nodeaccess_userreference_form_field_ui_field_edit_form_submit | Extra submit function for User reference field config. |
nodeaccess_userreference_menu | Implements hook_menu(). |
nodeaccess_userreference_node_access_explain | Implements hook_node_access_explain(). |
nodeaccess_userreference_node_access_records | Implements hook_node_access_records(). |
nodeaccess_userreference_node_grants | Implements hook_node_grants(). |