/[drupal]/contributions/sandbox/alaa/diff/diff.module
ViewVC logotype

Contents of /contributions/sandbox/alaa/diff/diff.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download) (as text)
Thu Mar 3 15:46:28 2005 UTC (4 years, 8 months ago) by alaa
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/x-php
Just a quick hack based on Pear's Text_Diff
1 <?php /* -*-php-*- */
2
3 /*
4 * Diff module for drupal.
5 * Copyright (c) 2005 Mohammed Sameer.
6 * This module is distributed under the GPL.
7 */
8
9 include_once 'Text/Diff.php';
10 include_once 'Text/Diff/Renderer.php';
11 include_once 'Text/Diff/Renderer/inline.php';
12
13 function diff_help($section) {
14 switch ($section) {
15 case 'admin/help#diff':
16 case 'admin/modules#description':
17 case 'admin/diff':
18 return "Show difference between a revision and the 1st revision.";
19 }
20 }
21
22 /**
23 * Implementation of hook_perm().
24 */
25 function diff_perm() {
26 return array('access diff');
27 }
28
29 /**
30 * Implementation of hook_menu().
31 */
32 function diff_menu($may_cache) {
33 $items = array();
34
35 /* if ($may_cache) {
36 }
37 */
38 if (arg(0) == 'node' && is_numeric(arg(1)))
39 {
40 $node = node_load(array('nid' => arg(1)));
41 if ($node->nid)
42 {
43 if ($node->revisions)
44 {
45 $items[] = array('path' => 'node/'. arg(1) .'/diff', 'title' => t('diff'),
46 'callback' => 'diff_page',
47 'access' => user_access('access diff'),
48 // 'weight' => 2,
49 'type' => MENU_LOCAL_TASK);
50 }
51 }
52 }
53 return $items;
54 }
55
56 /**
57 * Show a difference between revisions.
58 */
59 function diff_page($rid1=false, $rid2=false)
60 {
61 if ($rid1 !== false && $rid2 !== false)
62 {
63 _diff_show_revision(arg(1), arg(3), arg(4));
64 }
65 else
66 {
67 _diff_show_page(arg(1));
68 }
69 }
70
71 function _diff_show_revision($nid, $rid1, $rid2 )
72 {
73 $node = node_load(array('nid' => $nid));
74 $r1 = node_revision_load($node, $rid1);
75 //$rid2 = $rid -1;
76 $r2 = node_revision_load($node, $rid2);
77
78 $diff = &new Text_Diff(explode("\n", $r2->body), explode("\n",$r1->body));
79 $renderer = &new Text_Diff_Renderer_inline();
80 $node = $r1;
81 $r1->body = $renderer->render($diff);
82 //$r1->body = preg_replace("\n","<br />", $r1->body);
83
84 // This is stupid !
85 //$r1->body = implode("<br />",explode("\n", $r1->body));
86 $r1 = node_prepare($r1);
87 print theme ('page', theme('node', $r1));
88 }
89
90
91
92 /*
93 function _diff_show_revision($nid, $rid)
94 {
95 $node = node_load(array('nid' => $nid));
96 $r1 = node_revision_load($node, $rid);
97 $rid2 = $rid -1;
98 $r2 = node_revision_load($node, 0);
99
100 $diff = &new Text_Diff(explode("\n", $r2->body), explode("\n",$r1->body));
101 $renderer = &new Text_Diff_Renderer_unified();
102 $node = $r1;
103 $r1->body = $renderer->render($diff);
104 $r1 = node_prepare($r1);
105 print theme ('page', theme('node', $r1));
106 }
107 */
108 /*
109 function _diff_show_revision($nid, $rid)
110 {
111 $node = node_load(array('nid' => $nid));
112 $r1 = node_revision_load($node, $rid);
113 $rid2 = $rid -1;
114 $r2 = node_revision_load($node, 0);
115
116 $r1 = node_prepare($r1);
117 $r2 = node_prepare($r2);
118
119 $diff = &new Text_Diff(explode("\n", $r2->body), explode("\n",$r1->body));
120 $renderer = &new Text_Diff_Renderer_unified();
121 $node = $r1;
122 $r1->body = $renderer->render($diff);
123 print theme ('page', theme('node', $r1));
124 }
125 */
126
127 function _diff_show_page($nid)
128 {
129 $node = node_load(array('nid' => $nid));
130 drupal_set_title($node->title);
131
132 $header = array(t('Older revisions'), t('Operations'));
133 $last_key = count($node->revisions) - 1;
134 foreach ($node->revisions as $key => $revision)
135 {
136 if ($key != 0) {
137 $prev = l(t('previous'), "node/$node->nid/diff/$key/".($key-1));
138 $first = l(t('first'), "node/$node->nid/diff/$key/0");
139 }
140 if ($key != $last_key) {
141 $last = l(t('last'), "node/$node->nid/diff/$key/$last_key");
142 } else {
143 $last="";
144 }
145
146 $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'] ? '<br /><small>'. $revision['history'] .'</small>' : ''), $prev, $first, $last);
147 }
148 $output .= theme('table', $header, $rows);
149 print theme('page', $output);
150 }
151 ?>

  ViewVC Help
Powered by ViewVC 1.1.2