$revisions_access=((user_access('view revisions')||user_access('administer nodes'))&&node_access('view',$node)&&db_result(db_query('SELECT COUNT(vid) FROM {node_revisions} WHERE nid = %d',arg(1)))>1);
@@ -1314,17 +1323,21 @@ function node_revision_overview($nid) {
functionnode_revision_rollback($nid,$revision){
global$user;
if(user_access('administer nodes')){
if($title=db_fetch_object(db_query('SELECT title, timestamp FROM {node_revisions} WHERE nid = %d AND vid = %d',$nid,$revision))){
db_query('UPDATE {node} SET vid = %d, changed = %d WHERE nid = %d',$revision,$title->timestamp,$nid);
$node=node_load($nid,$revision);
if((user_access('roll back revisions')||user_access('administer nodes'))&&node_access('update',$node)){
if($node->vid){
$node->revision=1;
$node->log=t('Copy of the revision from %date.',array('%date'=>theme('placeholder',format_date($node->revision_timestamp))));
$new_node=node_save($node);
drupal_set_message(t('%title has been rolled back to the revision from %revision-date',array('%revision-date'=>theme('placeholder',format_date($title->timestamp)),'%title'=>theme('placeholder',check_plain($title->title)))));
drupal_set_message(t('%title has been rolled back to the revision from %revision-date',array('%revision-date'=>theme('placeholder',format_date($node->revision_timestamp)),'%title'=>theme('placeholder',check_plain($node->title)))));
}
else{
drupal_set_message(t('You tried to roll back to an invalid revision.'),'error');
}
drupal_goto('node/'.$nid.'/revisions');
}
drupal_access_denied();
}
/**
...
...
@@ -1333,12 +1346,14 @@ function node_revision_rollback($nid, $revision) {
functionnode_revision_delete($nid,$revision){
if(user_access('administer nodes')){
$count_revisions=db_result(db_query('SELECT COUNT(vid) FROM {node_revisions} WHERE nid = %d',$nid));
// Don't delete the last revision of the node or the current revision
if($count_revisions>1){
$node=node_load($nid,$revision);
$node=node_load($nid);
if(node_access('delete',$node)){
$current_revision=db_result(db_query('SELECT vid FROM {node} WHERE nid = %d',$nid));
// Don't delete the current revision
if($revision!=$current_revision){
$node=node_load($nid,$revision);
db_query("DELETE FROM {node_revisions} WHERE nid = %d AND vid = %d",$nid,$revision);
db_query("DELETE FROM {node_revisions} WHERE nid = %d AND vid = %d",$nid,$revision);
drupal_set_title(t('Revision of %title from %date',array('%title'=>theme('placeholder',$node->title),'%date'=>format_date($node->revision_timestamp))));
returnnode_show($node,arg(2));
}
else{
drupal_access_denied();
}
}
}
drupal_not_found();
break;
case'rollback':
node_revision_rollback(arg(1),arg(3));
break;
case'delete':
node_revision_delete(arg(1),arg(3));
break;
default:
drupal_not_found();
break;
}
}
drupal_not_found();
}
/**
* Generate a listing of promoted nodes.
*/
...
...
@@ -1952,7 +2015,7 @@ function node_page() {
switch($op){
case'view':
if(is_numeric(arg(1))){
$node=node_load(arg(1),$_GET['revision']);
$node=node_load(arg(1));
if($node->nid){
drupal_set_title(check_plain($node->title));
returnnode_show($node,arg(2));
...
...
@@ -1968,20 +2031,6 @@ function node_page() {
case'add':
returnnode_add(arg(2));
break;
case'revisions':
if(user_access('administer nodes')){
returnnode_revision_overview(arg(1));
}
else{
drupal_access_denied();
}
break;
case'rollback-revision':
node_revision_rollback(arg(1),arg(3));
break;
case'delete-revision':
node_revision_delete(arg(1),arg(3));
break;
case'edit':
if($_POST['op']==t('Delete')){
// Note: we redirect from node/uid/edit to node/uid/delete to make the tabs disappear.
...
...
@@ -2006,18 +2055,6 @@ function node_page() {
}
}
break;
case'revision':
if(is_numeric(arg(1))&&is_numeric(arg(3))){
$node=node_load(arg(1),arg(3));
if($node->nid){
drupal_set_title(t('Revision of %title',array('%title'=>theme('placeholder',$node->title))));
$revisions_access=((user_access('view revisions')||user_access('administer nodes'))&&node_access('view',$node)&&db_result(db_query('SELECT COUNT(vid) FROM {node_revisions} WHERE nid = %d',arg(1)))>1);
@@ -1314,17 +1323,21 @@ function node_revision_overview($nid) {
functionnode_revision_rollback($nid,$revision){
global$user;
if(user_access('administer nodes')){
if($title=db_fetch_object(db_query('SELECT title, timestamp FROM {node_revisions} WHERE nid = %d AND vid = %d',$nid,$revision))){
db_query('UPDATE {node} SET vid = %d, changed = %d WHERE nid = %d',$revision,$title->timestamp,$nid);
$node=node_load($nid,$revision);
if((user_access('roll back revisions')||user_access('administer nodes'))&&node_access('update',$node)){
if($node->vid){
$node->revision=1;
$node->log=t('Copy of the revision from %date.',array('%date'=>theme('placeholder',format_date($node->revision_timestamp))));
$new_node=node_save($node);
drupal_set_message(t('%title has been rolled back to the revision from %revision-date',array('%revision-date'=>theme('placeholder',format_date($title->timestamp)),'%title'=>theme('placeholder',check_plain($title->title)))));
drupal_set_message(t('%title has been rolled back to the revision from %revision-date',array('%revision-date'=>theme('placeholder',format_date($node->revision_timestamp)),'%title'=>theme('placeholder',check_plain($node->title)))));
}
else{
drupal_set_message(t('You tried to roll back to an invalid revision.'),'error');
}
drupal_goto('node/'.$nid.'/revisions');
}
drupal_access_denied();
}
/**
...
...
@@ -1333,12 +1346,14 @@ function node_revision_rollback($nid, $revision) {
functionnode_revision_delete($nid,$revision){
if(user_access('administer nodes')){
$count_revisions=db_result(db_query('SELECT COUNT(vid) FROM {node_revisions} WHERE nid = %d',$nid));
// Don't delete the last revision of the node or the current revision
if($count_revisions>1){
$node=node_load($nid,$revision);
$node=node_load($nid);
if(node_access('delete',$node)){
$current_revision=db_result(db_query('SELECT vid FROM {node} WHERE nid = %d',$nid));
// Don't delete the current revision
if($revision!=$current_revision){
$node=node_load($nid,$revision);
db_query("DELETE FROM {node_revisions} WHERE nid = %d AND vid = %d",$nid,$revision);
db_query("DELETE FROM {node_revisions} WHERE nid = %d AND vid = %d",$nid,$revision);
drupal_set_title(t('Revision of %title from %date',array('%title'=>theme('placeholder',$node->title),'%date'=>format_date($node->revision_timestamp))));
returnnode_show($node,arg(2));
}
else{
drupal_access_denied();
}
}
}
drupal_not_found();
break;
case'rollback':
node_revision_rollback(arg(1),arg(3));
break;
case'delete':
node_revision_delete(arg(1),arg(3));
break;
default:
drupal_not_found();
break;
}
}
drupal_not_found();
}
/**
* Generate a listing of promoted nodes.
*/
...
...
@@ -1952,7 +2015,7 @@ function node_page() {
switch($op){
case'view':
if(is_numeric(arg(1))){
$node=node_load(arg(1),$_GET['revision']);
$node=node_load(arg(1));
if($node->nid){
drupal_set_title(check_plain($node->title));
returnnode_show($node,arg(2));
...
...
@@ -1968,20 +2031,6 @@ function node_page() {
case'add':
returnnode_add(arg(2));
break;
case'revisions':
if(user_access('administer nodes')){
returnnode_revision_overview(arg(1));
}
else{
drupal_access_denied();
}
break;
case'rollback-revision':
node_revision_rollback(arg(1),arg(3));
break;
case'delete-revision':
node_revision_delete(arg(1),arg(3));
break;
case'edit':
if($_POST['op']==t('Delete')){
// Note: we redirect from node/uid/edit to node/uid/delete to make the tabs disappear.
...
...
@@ -2006,18 +2055,6 @@ function node_page() {
}
}
break;
case'revision':
if(is_numeric(arg(1))&&is_numeric(arg(3))){
$node=node_load(arg(1),arg(3));
if($node->nid){
drupal_set_title(t('Revision of %title',array('%title'=>theme('placeholder',$node->title))));