cvs diff -u clone.module Process cvs exited with code 1 Index: clone.module =================================================================== RCS file: /cvs/drupal/contributions/modules/node_clone/clone.module,v retrieving revision 1.4 diff -u -r1.4 clone.module --- clone.module 28 Jul 2006 01:00:06 -0000 1.4 +++ clone.module 5 Sep 2006 08:42:05 -0000 @@ -18,10 +18,12 @@ * Implementation of hook_perm(). */ function clone_perm() { - return array('clone node'); + return array('clone nodes', 'clone nodes without confirm'); } - +/** + * Implementation of hook_menu(). + */ function clone_menu($may_cache) { $items = array(); @@ -29,10 +31,10 @@ if (arg(0) == 'node' && is_numeric(arg(1))){ $node=node_load(arg(1)); if ($node->nid) { - $access = (user_access('clone node') && filter_access($node->format) && node_access('create',$node->type)); + $access = (user_access('clone nodes') && filter_access($node->format) && node_access('create',$node->type)); $items[] = array('path' => 'node/'. $node->nid.'/clone', 'title' => t('clone'), - 'callback' => 'clone_node', 'access' => $access, + 'callback' => 'clone_node_confirm', 'access' => $access, 'type' => MENU_LOCAL_TASK, 'weight' => 5,); } } @@ -41,22 +43,55 @@ return $items; } -function clone_node() +/** + * Menu callback: prompt the user to confirm the operation + */ +function clone_node_confirm() { + + if (user_access('clone nodes without confirm')) { + clone_node(arg(1)); + } + else { + $node = node_load(arg(1)); + $form['nid'] = array('#type' => 'value', '#value' => $node->nid); + $output = confirm_form('clone_node_confirm', $form, + t('Are you sure you want to clone %title?', array('%title' => theme('placeholder', $node->title))), + NULL, t('This action will create a new node.'), + t('Clone'), t('Cancel')); + + return $output; + } +} + +/** + * Handle confirm form submission + */ +function clone_node_confirm_submit($form_id, $form_values) { + if ($form_values['confirm']) { + clone_node($form_values['nid']); + } + return ''; +} + +/** + * Clones a node + */ +function clone_node($nid) { + if (is_numeric($nid)) { global $user; - - $nid=arg(1); + $node = node_load($nid); - + $node->nid = NULL; $node->uid = $user->uid; $node->created = 0; $node->menu = NULL; $node->path = NULL; - $node->title = 'Clone of '.$node->title; - + $node->title = t('Clone of %title', array('%title' => $node->title)); + node_save($node); - drupal_goto('node/'. $node->nid . '/edit'); + } }