Index: modules/diff/diff.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/diff/diff.module,v retrieving revision 1.7 diff -u -F^f -r1.7 diff.module --- modules/diff/diff.module 29 Oct 2005 16:58:13 -0000 1.7 +++ modules/diff/diff.module 29 Sep 2006 21:05:31 -0000 @@ -1,5 +1,5 @@ arg(1))); - if ($node->nid) { - if ($node->vid > 1) { - $items[] = array('path' => 'node/'. arg(1) .'/diff', 'title' => t('diff'), - 'callback' => 'diff_page', - 'callback arguments' => array(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); + $node = node_load(arg(1)); + if ($node->nid) { + if ( count(node_revision_list($node)) > 1 ) { + $items[] = array('path' => 'node/'. arg(1) .'/diff', 'title' => t('diff'), + 'callback' => 'diff_page', + 'callback arguments' => array(arg(1)), + 'access' => user_access('access diff'), + 'weight' => 6, + 'type' => MENU_LOCAL_TASK); } } } - } return $items; } +/** + * Show a difference between revisions. + */ function diff_page($nid, $rid1 = NULL, $rid2 = NULL) { + drupal_set_html_head(theme('stylesheet_import', base_path() . drupal_get_path('module', 'diff') .'/diff.css')); + include_once 'Text/Diff.php'; + include_once 'Text/Diff/Renderer.php'; + include_once 'Text/Diff/Renderer/inline.php'; + if (!is_null($rid1)) { - return diff_revision_detail($nid, $rid1, $rid2); + return _diff_show_revision($nid, $rid1, $rid2); } else { - return diff_revision_overview($nid); + return _diff_show_page($nid); } } -/** - * Show a difference between revisions. - */ -function diff_revision_detail($nid, $rid1, $rid2 = NULL) { - drupal_set_title(t('Differences between versions %1 and %2', array('%1' => $rid1, '%2' => $rid2 ? $rid2 : t('current')))); - $path = dirname(__FILE__); - require_once "$path/Text/Diff.php"; - require_once "$path/Text/Diff/Renderer.php"; - require_once "$path/Text/Diff/Renderer/inline.php"; - - $r1 = node_load(array('nid' => $nid), $rid1); - $r2 = node_load(array('nid' => $nid), $rid2); - $source = explode("\n", diff_node_render($r1)); - $target = explode("\n", diff_node_render($r2)); - $diff = &new Text_Diff($target, $source); +function _diff_show_revision($nid, $rid1, $rid2 = NULL) { + $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($source, $target); $renderer = &new Text_Diff_Renderer_inline(); $node = $r1; - if ($r1->title != $r2->title) { - $node->body = form_item(t('Title'), ''. check_plain($r2->title). ' '. check_plain($r1->title)). ''; - } - $node->body .= form_item(t('Body'), $renderer->render($diff)); - return $node->body; //theme('node', $node); + $node->body = $renderer->render($diff); + return theme('node', $node); } -/** - * Generate an overview table of older revisions of a node. - */ -function diff_revision_overview($nid) { +function _diff_show_page($nid) { $node = node_load($nid); + drupal_set_title($node->title); - drupal_set_title(t('Revisions for %title', array('%title' => check_plain($node->title)))); - - if ($node->vid) { - $header = array('', t('Author'), t('Title'), t('Date'), array('colspan' => '2', 'data' => t('Operations'))); - - $revisions = node_revision_list($node); - - $i = 0; - foreach ($revisions as $revision) { - $row = ++$i; - - if (!$revision->current_vid) { - $links[] = l(t('current'), "node/$node->nid/diff/$revision->vid"); - $txt_vid = $revision->vid; - } - else { - $txt_vid = $revision->vid. ' '. t('(current)'); - } - if ($revision->vid > 1) { - $links[] = l(t('previous '), "node/$node->nid/diff/$revision->vid/".($revision->vid-1)); - $links[] = l(t('first '), "node/$node->nid/diff/$revision->vid/1"); - } - $difflinks = t('diff to: '). theme('links', $links); - unset($links); - - $rows[] = array( - array('data' => $txt_vid, 'rowspan' => ($revision->log != '') ? 2 : 1), - theme('username', $revision), - $revision->title, - format_date($revision->timestamp, 'small'), - $difflinks, - // l(t('view'), "node/$node->nid"), - ); - if ($revision->log != '') { - $rows[] = array(array('data' => $revision->log, 'colspan' => 5)); - } + $header = array(t('Older revisions'), array('data' => t('Operations'), 'colspan' => 3)); + // $last_key = count($node->revisions) - 1; + +// $revisions = array_reverse(node_revision_list($node), TRUE); + $revisions = node_revision_list($node); + +dprint_r($revisions); + $revisions = array_reverse($revisions); +dprint_r($revisions); + + + foreach ($revisions as $key => $revision) { + $vid = $revision->vid; + if ($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)); } - $output .= theme('table', $header, $rows); + $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); } - - return $output; + return theme('table', $header, $rows); } // Get node *body* output (filtered and with module-specific fields). Modified from node_update_index() @@ -148,4 +126,4 @@ function diff_node_render($node) { return $node->body; } -?> +?> \ No newline at end of file