| 1 |
<?php |
<?php |
| 2 |
// $Id: revisioning.module,v 1.1.2.1 2009/03/25 23:22:47 rdeboer Exp $ |
// $Id: revisioning.module,v 1.1.2.2 2009/03/29 22:30:40 rdeboer Exp $ |
| 3 |
|
|
| 4 |
/** |
/** |
| 5 |
* @file |
* @file |
| 152 |
* Implementation of hook_nodeapi(). |
* Implementation of hook_nodeapi(). |
| 153 |
*/ |
*/ |
| 154 |
function revisioning_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) { |
function revisioning_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) { |
| 155 |
|
$args = arg(); |
| 156 |
|
// Only interested in URIs that start with "node/<nid>" |
| 157 |
|
if ($args[0] != 'node' || !is_numeric($args[1])) { |
| 158 |
|
return; |
| 159 |
|
} |
| 160 |
|
|
| 161 |
switch ($op) { |
switch ($op) { |
| 162 |
case 'alter': |
case 'alter': |
| 163 |
case 'delete': |
case 'delete': |
| 175 |
return; |
return; |
| 176 |
|
|
| 177 |
case 'view': |
case 'view': |
| 178 |
if (!$teaser) { |
if (!$teaser) { // this test may be superfluous |
| 179 |
_handle_view_op($node); |
_handle_view_op($node); |
| 180 |
} |
} |
| 181 |
return; |
return; |
| 182 |
} |
} |
| 183 |
if (end(arg()) == 'edit') { |
if (end($args) == 'edit') { |
| 184 |
if ($op == 'prepare') { |
if ($op == 'prepare') { |
| 185 |
$count = _number_of_revisions_newer_than($node->vid, $node->nid); |
$count = _number_of_revisions_newer_than($node->vid, $node->nid); |
| 186 |
if ($count == 1) { |
if ($count == 1) { |
| 559 |
* nothing |
* nothing |
| 560 |
*/ |
*/ |
| 561 |
function _handle_view_op($node) { |
function _handle_view_op($node) { |
| 562 |
|
$args = arg(); |
| 563 |
$access_view = module_grants_node_revision_access('view revisions', $node); |
$access_view = module_grants_node_revision_access('view revisions', $node); |
| 564 |
$access_edit = module_grants_node_revision_access('edit revisions', $node); |
$access_edit = module_grants_node_revision_access('edit revisions', $node); |
| 565 |
$access_delete = module_grants_node_revision_access('delete revisions', $node); |
$access_delete = module_grants_node_revision_access('delete revisions', $node); |
| 589 |
'@date' => format_date($node->revision_timestamp, 'small'))); |
'@date' => format_date($node->revision_timestamp, 'small'))); |
| 590 |
|
|
| 591 |
// Add a link to the diff if we have Diff module installed. |
// Add a link to the diff if we have Diff module installed. |
| 592 |
if (module_exists('diff')) { |
if (!$is_current && module_exists('diff')) { |
| 593 |
|
$comparison_url = "node/$node->nid/revisions/view/"; |
| 594 |
|
// Make sure that latest of the two revisions is on the right |
| 595 |
if ($is_pending) { |
if ($is_pending) { |
| 596 |
$diff_link = "node/$node->nid/revisions/view/$current_revision->vid/$node->vid"; |
$comparison_url .= "$current_revision->vid/$node->vid"; |
| 597 |
} |
} |
| 598 |
else { |
else { |
| 599 |
$diff_link = "node/$node->nid/revisions/view/$node->vid/$current_revision->vid"; |
$comparison_url .= "$node->vid/$current_revision->vid"; |
| 600 |
} |
} |
| 601 |
$links[] = l(t('Compare revisions'), $diff_link); |
$links[] = l(t('Compare to current'), $comparison_url); |
| 602 |
} |
} |
| 603 |
} |
} |
| 604 |
$base_url = "node/$node->nid/revisions/$node->vid"; |
$base_url = "node/$node->nid/revisions/$node->vid"; |
| 620 |
// Don't provide link to delete current -- node must point to a revision. |
// Don't provide link to delete current -- node must point to a revision. |
| 621 |
$links[] = l(t('Delete this revision'), "$base_url/delete"); |
$links[] = l(t('Delete this revision'), "$base_url/delete"); |
| 622 |
} |
} |
| 623 |
if ($access_view) { |
if ($access_view && $args[2] == 'revisions') { |
| 624 |
|
// Don't provide link to 'Show all revisions' when Revisions tab is available |
| 625 |
$links[] = l(t('Show all revisions'), "node/$node->nid/revisions"); |
$links[] = l(t('Show all revisions'), "node/$node->nid/revisions"); |
| 626 |
} |
} |
| 627 |
|
|
| 628 |
if ($message) { |
if ($message) { |
| 629 |
|
// @todo create a revisioning theme, see theme.inc for examples |
| 630 |
drupal_set_message($message . theme('item_list', $links)); |
drupal_set_message($message . theme('item_list', $links)); |
| 631 |
} |
} |
| 632 |
} |
} |