Index: diff.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/diff/diff.module,v
retrieving revision 1.23.2.3.2.22
diff -u -p -r1.23.2.3.2.22 diff.module
--- diff.module	20 Aug 2010 06:19:01 -0000	1.23.2.3.2.22
+++ diff.module	24 Aug 2010 22:45:40 -0000
@@ -108,7 +108,7 @@ function diff_menu_alter(&$callbacks) {
  * Access callback for the node revisions page.
  */
 function diff_node_revision_access($node, $op = 'view') {
-  $may_revision_this_type = variable_get('enable_revisions_page_'. $node->type, TRUE) || user_access('administer nodes');
+  $may_revision_this_type = user_access('diff '. $node->type .' view inline') || user_access('diff '. $node->type .' revision access') || user_access('view revisions') || user_access('view '. $node->type .' revisions') || user_access('administer nodes');
   return $may_revision_this_type && _node_revision_access($node, $op);
 }
 
@@ -116,25 +116,60 @@ function diff_node_revision_access($node
  * Implementation of hook_block().
  */
 function diff_block($op = 'list', $delta = 0, $edit = array()) {
-  if ($op === 'list') {
-    return array('inline' => array('info' => t('Inline diff')));
+  switch ($op) {
+    case 'list':
+      return array(
+        'inline' => array(
+          'info' => t('Inline diff')
+        )
+      );
+
+    case 'view':
+      if (function_exists($function = "diff_block_{$delta}_view")) {
+        return $function();
+      }
+      break;
   }
-  elseif ($op === 'view' && $delta === 'inline' && user_access('view revisions') && $node = menu_get_object()) {
-    $block = array();
-    $revisions = node_revision_list($node);
-    if (count($revisions) > 1) {
-      $block['subject'] = t('Highlight changes');
-      $block['content'] = drupal_get_form('diff_inline_form', $node, $revisions);
+}
+
+function diff_block_inline_view() {
+  if (arg(0) == 'node') {
+    $nid = arg(1);
+    $op = arg(2);
+    if (is_numeric($nid) && empty($op)) {
+      $node = node_load($nid);
+      if (user_access("diff {$node->type} view inline")) {
+        $block = array();
+        $revisions = node_revision_list($node);
+        if (count($revisions) > 1) {
+          $block['subject'] = t('Highlight changes');
+          $block['content'] = drupal_get_form('diff_inline_form', $node, $revisions);
+        }
+        return $block;
+      }
     }
-    return $block;
   }
 }
 
 /**
+ * Implementation of hook_perm().
+ */
+function diff_perm() {
+  $perms = array();
+  foreach (node_get_types() as $type) {
+    $perms[] = 'diff '. $type->type .' view inline';
+    $perms[] = 'diff '. $type->type .' revision access';
+    $perms[] = 'diff '. $type->type .' view changes';
+  }
+  
+  return $perms;
+}
+
+/**
  * Implementation of hook_nodeapi().
  */
 function diff_nodeapi(&$node, $op, $teaser, $page) {
-  if ($page && $op == 'view' && user_access('view revisions') && variable_get('show_diff_inline_'. $node->type, FALSE)) {
+  if ($page && $op == 'view' && (user_access('view revisions') || user_access('view '. $node->type .' revisions')) && user_access('diff '. $node->type .' view inline')) {
     // Ugly but cheap way to check that we are viewing a node's revision page.
     if (arg(2) === 'revisions' && arg(3) === $node->vid) {
       module_load_include('inc', 'diff', 'diff.pages');
@@ -152,7 +187,7 @@ function diff_nodeapi(&$node, $op, $teas
 function diff_form_alter(&$form, $form_state, $form_id) {
   if (isset($form['type']['#value']) && $form['type']['#value'] .'_node_form' == $form_id) {
     // Add a 'View changes' button on the node edit form.
-    if (variable_get('show_preview_changes_'. $form['type']['#value'], TRUE) && $form['nid']['#value'] > 0) {
+    if (user_access('diff '. $form['#node']->type .' view changes') && $form['nid']['#value'] > 0) {
       $form['buttons']['preview_changes'] = array(
         '#type' => 'submit',
         '#value' => t('View changes'),
@@ -161,34 +196,6 @@ function diff_form_alter(&$form, $form_s
       );
     }
   }
-  elseif ($form_id == 'node_type_form' && isset($form['identity']['type'])) {
-    // Node type edit form.
-    // Add checkbox to activate 'View changes' button per node type.
-    $form['workflow']['diff'] = array(
-      '#title' => t('Diff'),
-      '#type' => 'item',
-      '#tree' => FALSE,
-    );
-    $form['workflow']['diff']['show_preview_changes'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Show %preview_changes button on node edit form', array('%preview_changes' => t('View changes'))),
-      '#weight' => 10,
-      '#default_value' => variable_get('show_preview_changes_'. $form['#node_type']->type, TRUE),
-    );
-    $form['workflow']['diff']['show_diff_inline'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Show diffs inline for this content type'),
-      '#description' => t("You must enable the 'Inline diff' block to use this feature"),
-      '#weight' => 10,
-      '#default_value' => variable_get('show_diff_inline_'. $form['#node_type']->type, FALSE),
-    );
-    $form['workflow']['diff']['enable_revisions_page'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Enable the %revisions page for this content type', array('%revisions' => t('Revisions'))),
-      '#weight' => 11,
-      '#default_value' => variable_get('enable_revisions_page_'. $form['#node_type']->type, TRUE),
-    );
-  }
 }
 
 /**
Index: diff.pages.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/diff/Attic/diff.pages.inc,v
retrieving revision 1.1.2.11
diff -u -p -r1.1.2.11 diff.pages.inc
--- diff.pages.inc	20 Aug 2010 06:19:01 -0000	1.1.2.11
+++ diff.pages.inc	24 Aug 2010 22:45:40 -0000
@@ -58,12 +58,13 @@ function diff_node_revisions($form_state
     $revisions = $revision_list;
   }
 
+  $type = $node>=type;
   $revert_permission = FALSE;
-  if ((user_access('revert revisions') || user_access('administer nodes')) && node_access('update', $node)) {
+  if ((user_access('revert revisions') || user_access('revert ' . $type . ' revisions') || user_access('administer nodes')) && node_access('update', $node)) {
     $revert_permission = TRUE;
   }
   $delete_permission = FALSE;
-  if ((user_access('delete revisions') || user_access('administer nodes')) && node_access('delete', $node)) {
+  if ((user_access('delete revisions') || user_access('delete ' . $type . ' revisions') || user_access('administer nodes')) && node_access('delete', $node)) {
     $delete_permission = TRUE;
   }
 
