diff -Nur modules/diff.orig/diff.module modules/diff/diff.module --- modules/diff.orig/diff.module 2005-05-05 21:20:37.000000000 +0300 +++ modules/diff/diff.module 2007-01-30 00:23:28.886317096 +0200 @@ -1,4 +1,4 @@ - * This module is distributed under the GPL. -*/ + * 4.7 port by Mohammed Sameer for eglug.org + */ include_once 'Text/Diff.php'; include_once 'Text/Diff/Renderer.php'; @@ -36,21 +37,22 @@ if (!$may_cache) { if (arg(0) == 'node' && is_numeric(arg(1))) { - $node = node_load(array('nid' => arg(1))); + $node = node_load(arg(1)); if ($node->nid) { - if ($node->revisions) { - $items[] = array('path' => 'node/'. arg(1) .'/diff', 'title' => t('diff'), - 'callback' => 'diff_page', - 'callback arguments' => arg(1), - 'access' => user_access('access diff'), - 'weight' => 6, - 'type' => MENU_LOCAL_TASK); + if ($node->vid > 1) { + $items[] = array('path' => 'node/'. arg(1) .'/diff', + 'title' => t('diff'), + 'callback' => 'diff_page', + 'callback arguments' => arg(1), + 'access' => user_access('access diff'), + 'weight' => 6, + 'type' => MENU_LOCAL_TASK); } } } - $path = drupal_get_path('module', 'diff'); - $style = ""; - drupal_set_html_head($style); + } + else { + theme_add_style(drupal_get_path('module', 'diff') . '/diff.css'); } return $items; } @@ -69,11 +71,11 @@ function _diff_show_revision($nid, $rid1, $rid2 = NULL) { - $r1 = node_load(array('nid' => $nid), $rid1); - $r2 = node_load(array('nid' => $nid), $rid2); + $r1 = node_load($nid, $rid1); + $r2 = node_load($nid, $rid2); $source = explode("\n", diff_node_render($r2)); $target = explode("\n", diff_node_render($r1)); - $diff = &new Text_Diff($target, $source); + $diff = &new Text_Diff($source, $target); $renderer = &new Text_Diff_Renderer_inline(); $node = $r1; $node->body = $renderer->render($diff); @@ -81,21 +83,32 @@ } function _diff_show_page($nid) { - $node = node_load(array('nid' => $nid)); + $node = node_load($nid); drupal_set_title($node->title); + $revisions = array_reverse(node_revision_list($node)); + $header = array(t('Older revisions'), array('data' => t('Operations'), 'colspan' => 3)); - // $last_key = count($node->revisions) - 1; - foreach ($node->revisions as $key => $revision) { + + foreach ($revisions as $key => $revision) { + $vid = $revision->vid; if ($key != 0) { - $prev = l(t('previous'), "node/$node->nid/diff/$key/".($key-1)); - $first = l(t('first'), "node/$node->nid/diff/$key/0"); + $prev = l(t('previous'), "node/$node->nid/diff/$vid/".( $revisions[$key-1]->vid )); + $first = l(t('first'), "node/$node->nid/diff/$vid/" .($revisions[0]->vid)); } - $current = l(t('current'), "node/$node->nid/diff/$key"); - $rows[] = array(t('revision #%r revised by %u on %d', array('%r' => $key, '%u' => format_name(user_load(array('uid' => $revision['uid']))), '%d' => format_date($revision['timestamp'], 'small'))) . ($revision['history'] ? '
'. $revision['history'] .'' : ''), $prev, $first, $current); + $current = l(t('current'), "node/$node->nid/diff/$vid"); + $rows[] = array( + t('revision %r (%v) revised by %u on %d', + array( + '%r' => 1 + $key, + '%v' => $vid, + '%u' => theme('username', user_load(array('uid' => $revision->uid))), + '%d' => format_date($revision->timestamp, 'small') + ) + ) . ($revision->history ? '
'. $revision->history .'' : ''), + $prev, $first, $current); } - $output .= theme('table', $header, $rows); - return $output; + return theme('table', $header, $rows); } // Get node *body* output (filtered and with module-specific fields). Modified from node_update_index()