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