Index: modules/node/views_handler_field_node_revision.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/modules/node/Attic/views_handler_field_node_revision.inc,v
retrieving revision 1.1.4.2
diff -u -p -r1.1.4.2 views_handler_field_node_revision.inc
--- modules/node/views_handler_field_node_revision.inc	8 Mar 2010 20:02:42 -0000	1.1.4.2
+++ modules/node/views_handler_field_node_revision.inc	15 Dec 2010 08:11:06 -0000
@@ -18,7 +18,12 @@ class views_handler_field_node_revision 
   }
   function option_definition() {
     $options = parent::option_definition();
-    $options['link_to_node_revision'] = array('default' => FALSE);
+    $options['link_to_node_revision'] = array(
+      'contains' => array(
+        'link' => array('default' => FALSE),
+        'substitute' => array('default' => FALSE),
+       ),
+    );
     return $options;
   }
 
@@ -27,11 +32,22 @@ class views_handler_field_node_revision 
    */
   function options_form(&$form, &$form_state) {
     parent::options_form($form, $form_state);
-    $form['link_to_node_revision'] = array(
+    $form['link_to_node_revision']['#tree'] = TRUE;
+    $form['link_to_node_revision']['link'] = array(
       '#title' => t('Link this field to its node revision'),
       '#description' => t('This will override any other link you have set.'),
       '#type' => 'checkbox',
-      '#default_value' => !empty($this->options['link_to_node_revision']),
+      '#default_value' => !empty($this->options['link_to_node_revision']['link']),
+    );
+    $form['link_to_node_revision']['substitute'] = array(
+      '#title' => t('Replace revision link with link to node if user has no access to revision'),
+      '#description' => t('If you keep this checkbox unchecked and user has no access to revision link will not be shown.'),
+      '#type' => 'checkbox',
+      '#default_value' => !empty($this->options['link_to_node_revision']['substitute']),
+      '#process' => array('views_process_dependency'),
+      '#dependency' => array(
+        'edit-options-link-to-node-revision-link' => array(1),
+      ),
     );
   }
 
@@ -41,9 +57,23 @@ class views_handler_field_node_revision 
    * Data should be made XSS safe prior to calling this function.
    */
   function render_link($data, $values) {
-    if (!empty($this->options['link_to_node_revision']) && $data !== NULL && $data !== '') {
+    if (!empty($this->options['link_to_node_revision']['link']) && $data !== NULL && $data !== '') {
       $this->options['alter']['make_link'] = TRUE;
       $this->options['alter']['path'] = "node/" . $values->{$this->aliases['nid']} . '/revisions/' . $values->{$this->aliases['vid']} .'/view';
+
+      // Check whether user has access to this revision.
+      $node_access = new StdClass();
+      $node_access->nid = $values->{$this->aliases['nid']};
+      $node_access->vid = $values->{$this->aliases['vid']};
+
+      if (!_node_revision_access($node_access, 'view')) {
+		if (!empty($this->options['link_to_node_revision']['substitute'])) {
+		  $this->options['alter']['path'] = "node/" . $values->{$this->aliases['nid']};
+		}
+		else {
+		  $this->options['alter']['make_link'] = FALSE;
+		}
+      }
       if (isset($this->aliases['language'])) {
         $languages = language_list();
         if (isset($languages[$values->{$this->aliases['language']}])) {
