diff --git a/node_access_link.module b/node_access_link.module index 7bee28fb2b69789b6f58931c0672f21f18fc46a0..510c6dbbfdf530283d4314a417de40bf3d9b1f5d 100644 --- a/node_access_link.module +++ b/node_access_link.module @@ -34,14 +34,14 @@ function node_access_link_form_node_type_form_alter(&$form, &$form_state) { $form['node_access_link']['node_access_link_grants'] = array( '#type' => 'checkboxes', - '#title' => t('Grants'), + '#title' => t('Grants to give'), '#default_value' => $default_grants, '#options' => array( 'view' => t('View'), 'update' => t('Update'), 'delete' => t('Delete'), ), - '#description' => t('What operations will be temporarily given to authorised user for the node.'), + '#description' => t('What operations will be temporarily given to authorised user for the node. This not affect users who is authorised yet.'), ); $form['#submit'][] = 'node_access_link_form_node_type_form_alter_submit'; @@ -53,11 +53,19 @@ function node_access_link_form_node_type_form_alter(&$form, &$form_state) { function node_access_link_form_node_type_form_alter_submit(&$form, &$form_state) { $instance = field_info_instance('node', 'field_node_access_link_authkey', $form_state['values']['type']); - if(!$instance && $form_state['values']['node_access_link_enable']) { // Instance does not exist and checkbox is enabled - node_access_link_create_field_instance($form_state['values']['type']); + // Instance does not exist and checkbox is enabled - create filed and instance + if(!$instance && $form_state['values']['node_access_link_enable']) { + node_access_link_create_field_instance($form_state['values']['type'], $form_state['values']['node_access_link_grants']); } - elseif($instance && !$form_state['values']['node_access_link_enable']) { // Instance exists and checkbox is disabled + // Instance exists and checkbox is enabled - update instance + elseif($instance && $form_state['values']['node_access_link_enable']) { + $instance['node_access_link_grants'] = $form_state['values']['node_access_link_grants']; + field_update_instance($instance); + } + + // Instance exists and checkbox is disabled - delete filed and instance + elseif($instance && !$form_state['values']['node_access_link_enable']) { field_delete_instance($instance); } @@ -67,7 +75,7 @@ function node_access_link_form_node_type_form_alter_submit(&$form, &$form_state) /** * Create field instance in specified node type. */ -function node_access_link_create_field_instance($node_type) { +function node_access_link_create_field_instance($node_type, $grants) { if(!field_info_field('field_node_access_link_authkey')) { $field = array( 'translatable' => '1', @@ -124,6 +132,7 @@ function node_access_link_create_field_instance($node_type) { 'field_name' => 'field_node_access_link_authkey', 'entity_type' => 'node', 'bundle' => $node_type, + 'node_access_link_grants' => $grants, ); field_create_instance($instance); } @@ -136,20 +145,28 @@ function node_access_link_node_access($node, $op, $account) { if($op == 'create') return NODE_ACCESS_IGNORE; - // Check key - if(isset($_GET['authkey']) && isset($node->field_node_access_link_authkey)) { + // Check key if: + if(isset($_GET['authkey']) && // authkey param is set + isset($node->field_node_access_link_authkey) && // authkey in node is set + !isset($_SESSION['node_access_link_auth_nodes'][$node->nid])) { // grants has not loaded yet + $authkeys = field_get_items('node', $node, 'field_node_access_link_authkey'); if($authkeys[0]['value'] == $_GET['authkey']) { // Start session if(!isset($_SESSION)) drupal_session_initialize(); + + // Load settings + $instance = field_info_instance('node', 'field_node_access_link_authkey', $node->type); + // Save authorization to session - $_SESSION['node_access_link_auth_nodes'][$node->nid] = TRUE; + $_SESSION['node_access_link_auth_nodes'][$node->nid] = $instance['node_access_link_grants']; } } // Permit if checked - if(isset($_SESSION['node_access_link_auth_nodes'][$node->nid])) + if(isset($_SESSION['node_access_link_auth_nodes'][$node->nid]) && + $_SESSION['node_access_link_auth_nodes'][$node->nid][$op]) return NODE_ACCESS_ALLOW; }