webmaster@1: title)); webmaster@1: return drupal_get_form($node->type .'_node_form', $node); webmaster@1: } webmaster@1: webmaster@1: function node_add_page() { webmaster@1: $item = menu_get_item(); webmaster@1: $content = system_admin_menu_block($item); webmaster@1: return theme('node_add_list', $content); webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Display the list of available node types for node creation. webmaster@1: * webmaster@1: * @ingroup themeable webmaster@1: */ webmaster@1: function theme_node_add_list($content) { webmaster@1: $output = ''; webmaster@1: webmaster@1: if ($content) { webmaster@1: $output = '
'; webmaster@1: foreach ($content as $item) { webmaster@1: $output .= '
'. l($item['title'], $item['href'], $item['options']) .'
'; webmaster@1: $output .= '
'. filter_xss_admin($item['description']) .'
'; webmaster@1: } webmaster@1: $output .= '
'; webmaster@1: } webmaster@1: return $output; webmaster@1: } webmaster@1: webmaster@1: webmaster@1: /** webmaster@1: * Present a node submission form or a set of links to such forms. webmaster@1: */ webmaster@1: function node_add($type) { webmaster@1: global $user; webmaster@1: webmaster@1: $types = node_get_types(); webmaster@1: $type = isset($type) ? str_replace('-', '_', $type) : NULL; webmaster@1: // If a node type has been specified, validate its existence. webmaster@1: if (isset($types[$type]) && node_access('create', $type)) { webmaster@1: // Initialize settings: webmaster@1: $node = array('uid' => $user->uid, 'name' => (isset($user->name) ? $user->name : ''), 'type' => $type, 'language' => ''); webmaster@1: webmaster@1: drupal_set_title(t('Create @name', array('@name' => $types[$type]->name))); webmaster@1: $output = drupal_get_form($type .'_node_form', $node); webmaster@1: } webmaster@1: webmaster@1: return $output; webmaster@1: } webmaster@1: webmaster@1: function node_form_validate($form, &$form_state) { webmaster@1: node_validate($form_state['values'], $form); webmaster@1: } webmaster@1: webmaster@1: function node_object_prepare(&$node) { webmaster@1: // Set up default values, if required. webmaster@1: $node_options = variable_get('node_options_'. $node->type, array('status', 'promote')); webmaster@1: // If this is a new node, fill in the default values. webmaster@1: if (!isset($node->nid)) { webmaster@1: foreach (array('status', 'promote', 'sticky') as $key) { webmaster@1: $node->$key = in_array($key, $node_options); webmaster@1: } webmaster@1: global $user; webmaster@1: $node->uid = $user->uid; webmaster@1: $node->created = time(); webmaster@1: } webmaster@1: else { webmaster@1: $node->date = format_date($node->created, 'custom', 'Y-m-d H:i:s O'); webmaster@1: } webmaster@1: // Always use the default revision setting. webmaster@1: $node->revision = in_array('revision', $node_options); webmaster@1: webmaster@1: node_invoke($node, 'prepare'); webmaster@1: node_invoke_nodeapi($node, 'prepare'); webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Generate the node add/edit form array. webmaster@1: */ webmaster@1: function node_form(&$form_state, $node) { webmaster@1: global $user; webmaster@1: webmaster@1: if (isset($form_state['node'])) { webmaster@1: $node = $form_state['node'] + (array)$node; webmaster@1: } webmaster@1: if (isset($form_state['node_preview'])) { webmaster@1: $form['#prefix'] = $form_state['node_preview']; webmaster@1: } webmaster@1: $node = (object)$node; webmaster@1: foreach (array('body', 'title', 'format') as $key) { webmaster@1: if (!isset($node->$key)) { webmaster@1: $node->$key = NULL; webmaster@1: } webmaster@1: } webmaster@1: if (!isset($form_state['node_preview'])) { webmaster@1: node_object_prepare($node); webmaster@1: } webmaster@1: else { webmaster@1: $node->build_mode = NODE_BUILD_PREVIEW; webmaster@1: } webmaster@1: webmaster@1: // Set the id of the top-level form tag webmaster@1: $form['#id'] = 'node-form'; webmaster@1: webmaster@1: // Basic node information. webmaster@1: // These elements are just values so they are not even sent to the client. webmaster@1: foreach (array('nid', 'vid', 'uid', 'created', 'type', 'language') as $key) { webmaster@1: $form[$key] = array( webmaster@1: '#type' => 'value', webmaster@1: '#value' => isset($node->$key) ? $node->$key : NULL, webmaster@1: ); webmaster@1: } webmaster@1: webmaster@1: // Changed must be sent to the client, for later overwrite error checking. webmaster@1: $form['changed'] = array( webmaster@1: '#type' => 'hidden', webmaster@1: '#default_value' => isset($node->changed) ? $node->changed : NULL, webmaster@1: ); webmaster@1: // Get the node-specific bits. webmaster@1: if ($extra = node_invoke($node, 'form', $form_state)) { webmaster@1: $form = array_merge_recursive($form, $extra); webmaster@1: } webmaster@1: if (!isset($form['title']['#weight'])) { webmaster@1: $form['title']['#weight'] = -5; webmaster@1: } webmaster@1: webmaster@1: $form['#node'] = $node; webmaster@1: webmaster@1: // Add a log field if the "Create new revision" option is checked, or if the webmaster@1: // current user has the ability to check that option. webmaster@1: if (!empty($node->revision) || user_access('administer nodes')) { webmaster@1: $form['revision_information'] = array( webmaster@1: '#type' => 'fieldset', webmaster@1: '#title' => t('Revision information'), webmaster@1: '#collapsible' => TRUE, webmaster@1: // Collapsed by default when "Create new revision" is unchecked webmaster@1: '#collapsed' => !$node->revision, webmaster@1: '#weight' => 20, webmaster@1: ); webmaster@1: $form['revision_information']['revision'] = array( webmaster@1: '#access' => user_access('administer nodes'), webmaster@1: '#type' => 'checkbox', webmaster@1: '#title' => t('Create new revision'), webmaster@1: '#default_value' => $node->revision, webmaster@1: ); webmaster@1: $form['revision_information']['log'] = array( webmaster@1: '#type' => 'textarea', webmaster@1: '#title' => t('Log message'), webmaster@1: '#rows' => 2, webmaster@1: '#description' => t('An explanation of the additions or updates being made to help other authors understand your motivations.'), webmaster@1: ); webmaster@1: } webmaster@1: webmaster@1: // Node author information for administrators webmaster@1: $form['author'] = array( webmaster@1: '#type' => 'fieldset', webmaster@1: '#access' => user_access('administer nodes'), webmaster@1: '#title' => t('Authoring information'), webmaster@1: '#collapsible' => TRUE, webmaster@1: '#collapsed' => TRUE, webmaster@1: '#weight' => 20, webmaster@1: ); webmaster@1: $form['author']['name'] = array( webmaster@1: '#type' => 'textfield', webmaster@1: '#title' => t('Authored by'), webmaster@1: '#maxlength' => 60, webmaster@1: '#autocomplete_path' => 'user/autocomplete', webmaster@1: '#default_value' => $node->name ? $node->name : '', webmaster@1: '#weight' => -1, webmaster@1: '#description' => t('Leave blank for %anonymous.', array('%anonymous' => variable_get('anonymous', t('Anonymous')))), webmaster@1: ); webmaster@1: $form['author']['date'] = array( webmaster@1: '#type' => 'textfield', webmaster@1: '#title' => t('Authored on'), webmaster@1: '#maxlength' => 25, webmaster@1: '#description' => t('Format: %time. Leave blank to use the time of form submission.', array('%time' => !empty($node->date) ? $node->date : format_date($node->created, 'custom', 'Y-m-d H:i:s O'))), webmaster@1: ); webmaster@1: webmaster@1: if (isset($node->date)) { webmaster@1: $form['author']['date']['#default_value'] = $node->date; webmaster@1: } webmaster@1: webmaster@1: // Node options for administrators webmaster@1: $form['options'] = array( webmaster@1: '#type' => 'fieldset', webmaster@1: '#access' => user_access('administer nodes'), webmaster@1: '#title' => t('Publishing options'), webmaster@1: '#collapsible' => TRUE, webmaster@1: '#collapsed' => TRUE, webmaster@1: '#weight' => 25, webmaster@1: ); webmaster@1: $form['options']['status'] = array( webmaster@1: '#type' => 'checkbox', webmaster@1: '#title' => t('Published'), webmaster@1: '#default_value' => $node->status, webmaster@1: ); webmaster@1: $form['options']['promote'] = array( webmaster@1: '#type' => 'checkbox', webmaster@1: '#title' => t('Promoted to front page'), webmaster@1: '#default_value' => $node->promote, webmaster@1: ); webmaster@1: $form['options']['sticky'] = array( webmaster@1: '#type' => 'checkbox', webmaster@1: '#title' => t('Sticky at top of lists'), webmaster@1: '#default_value' => $node->sticky, webmaster@1: ); webmaster@1: webmaster@1: // These values are used when the user has no administrator access. webmaster@1: foreach (array('uid', 'created') as $key) { webmaster@1: $form[$key] = array( webmaster@1: '#type' => 'value', webmaster@1: '#value' => $node->$key, webmaster@1: ); webmaster@1: } webmaster@1: webmaster@1: // Add the buttons. webmaster@1: $form['buttons'] = array(); webmaster@1: $form['buttons']['submit'] = array( webmaster@1: '#type' => 'submit', webmaster@11: '#access' => !variable_get('node_preview', 0) || (!form_get_errors() && isset($form_state['node_preview'])), webmaster@1: '#value' => t('Save'), webmaster@1: '#weight' => 5, webmaster@1: '#submit' => array('node_form_submit'), webmaster@1: ); webmaster@1: $form['buttons']['preview'] = array( webmaster@1: '#type' => 'submit', webmaster@1: '#value' => t('Preview'), webmaster@1: '#weight' => 10, webmaster@1: '#submit' => array('node_form_build_preview'), webmaster@1: ); webmaster@1: if (!empty($node->nid) && node_access('delete', $node)) { webmaster@1: $form['buttons']['delete'] = array( webmaster@1: '#type' => 'submit', webmaster@1: '#value' => t('Delete'), webmaster@1: '#weight' => 15, webmaster@1: '#submit' => array('node_form_delete_submit'), webmaster@1: ); webmaster@1: } webmaster@1: $form['#validate'][] = 'node_form_validate'; webmaster@1: $form['#theme'] = array($node->type .'_node_form', 'node_form'); webmaster@1: return $form; webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Return a node body field, with format and teaser. webmaster@1: */ webmaster@1: function node_body_field(&$node, $label, $word_count) { webmaster@1: webmaster@1: // Check if we need to restore the teaser at the beginning of the body. webmaster@1: $include = !isset($node->teaser) || ($node->teaser == substr($node->body, 0, strlen($node->teaser))); webmaster@1: webmaster@1: $form = array( webmaster@1: '#after_build' => array('node_teaser_js', 'node_teaser_include_verify')); webmaster@1: webmaster@1: $form['#prefix'] = '
'; webmaster@1: $form['#suffix'] = '
'; webmaster@1: webmaster@1: $form['teaser_js'] = array( webmaster@1: '#type' => 'textarea', webmaster@1: '#rows' => 10, webmaster@1: '#teaser' => 'edit-body', webmaster@1: '#teaser_checkbox' => 'edit-teaser-include', webmaster@1: '#disabled' => TRUE, webmaster@1: ); webmaster@1: webmaster@1: $form['teaser_include'] = array( webmaster@1: '#type' => 'checkbox', webmaster@1: '#title' => t('Show summary in full view'), webmaster@1: '#default_value' => $include, webmaster@1: '#prefix' => '
', webmaster@1: '#suffix' => '
', webmaster@1: ); webmaster@1: webmaster@1: $form['body'] = array( webmaster@1: '#type' => 'textarea', webmaster@1: '#title' => check_plain($label), webmaster@1: '#default_value' => $include ? $node->body : ($node->teaser . $node->body), webmaster@1: '#rows' => 20, webmaster@1: '#required' => ($word_count > 0), webmaster@1: ); webmaster@1: webmaster@1: $form['format'] = filter_form($node->format); webmaster@1: webmaster@1: return $form; webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Button sumit function: handle the 'Delete' button on the node form. webmaster@1: */ webmaster@1: function node_form_delete_submit($form, &$form_state) { webmaster@1: $destination = ''; webmaster@1: if (isset($_REQUEST['destination'])) { webmaster@1: $destination = drupal_get_destination(); webmaster@1: unset($_REQUEST['destination']); webmaster@1: } webmaster@1: $node = $form['#node']; webmaster@1: $form_state['redirect'] = array('node/'. $node->nid .'/delete', $destination); webmaster@1: } webmaster@1: webmaster@1: webmaster@1: function node_form_build_preview($form, &$form_state) { webmaster@1: $node = node_form_submit_build_node($form, $form_state); webmaster@1: $form_state['node_preview'] = node_preview($node); webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Present a node submission form. webmaster@1: * webmaster@1: * @ingroup themeable webmaster@1: */ webmaster@1: function theme_node_form($form) { webmaster@1: $output = "\n
\n"; webmaster@1: webmaster@1: // Admin form fields and submit buttons must be rendered first, because webmaster@1: // they need to go to the bottom of the form, and so should not be part of webmaster@1: // the catch-all call to drupal_render(). webmaster@1: $admin = ''; webmaster@1: if (isset($form['author'])) { webmaster@1: $admin .= "
\n"; webmaster@1: $admin .= drupal_render($form['author']); webmaster@1: $admin .= "
\n"; webmaster@1: } webmaster@1: if (isset($form['options'])) { webmaster@1: $admin .= "
\n"; webmaster@1: $admin .= drupal_render($form['options']); webmaster@1: $admin .= "
\n"; webmaster@1: } webmaster@1: $buttons = drupal_render($form['buttons']); webmaster@1: webmaster@1: // Everything else gets rendered here, and is displayed before the admin form webmaster@1: // field and the submit buttons. webmaster@1: $output .= "
\n"; webmaster@1: $output .= drupal_render($form); webmaster@1: $output .= "
\n"; webmaster@1: webmaster@1: if (!empty($admin)) { webmaster@1: $output .= "
\n"; webmaster@1: $output .= $admin; webmaster@1: $output .= "
\n"; webmaster@1: } webmaster@1: $output .= $buttons; webmaster@1: $output .= "
\n"; webmaster@1: webmaster@1: return $output; webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Generate a node preview. webmaster@1: */ webmaster@1: function node_preview($node) { webmaster@1: if (node_access('create', $node) || node_access('update', $node)) { webmaster@1: // Load the user's name when needed. webmaster@1: if (isset($node->name)) { webmaster@1: // The use of isset() is mandatory in the context of user IDs, because webmaster@1: // user ID 0 denotes the anonymous user. webmaster@1: if ($user = user_load(array('name' => $node->name))) { webmaster@1: $node->uid = $user->uid; webmaster@1: $node->picture = $user->picture; webmaster@1: } webmaster@1: else { webmaster@1: $node->uid = 0; // anonymous user webmaster@1: } webmaster@1: } webmaster@1: else if ($node->uid) { webmaster@1: $user = user_load(array('uid' => $node->uid)); webmaster@1: $node->name = $user->name; webmaster@1: $node->picture = $user->picture; webmaster@1: } webmaster@1: webmaster@1: $node->changed = time(); webmaster@1: webmaster@1: // Extract a teaser, if it hasn't been set (e.g. by a module-provided webmaster@1: // 'teaser' form item). webmaster@1: if (!isset($node->teaser)) { webmaster@1: $node->teaser = empty($node->body) ? '' : node_teaser($node->body, $node->format); webmaster@1: // Chop off the teaser from the body if needed. webmaster@1: if (!$node->teaser_include && $node->teaser == substr($node->body, 0, strlen($node->teaser))) { webmaster@1: $node->body = substr($node->body, strlen($node->teaser)); webmaster@1: } webmaster@1: } webmaster@1: webmaster@1: // Display a preview of the node. webmaster@1: // Previewing alters $node so it needs to be cloned. webmaster@1: if (!form_get_errors()) { webmaster@1: $cloned_node = drupal_clone($node); webmaster@1: $cloned_node->build_mode = NODE_BUILD_PREVIEW; webmaster@1: $output = theme('node_preview', $cloned_node); webmaster@1: } webmaster@1: drupal_set_title(t('Preview')); webmaster@1: webmaster@1: return $output; webmaster@1: } webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Display a node preview for display during node creation and editing. webmaster@1: * webmaster@1: * @param $node webmaster@1: * The node object which is being previewed. webmaster@1: * webmaster@1: * @ingroup themeable webmaster@1: */ webmaster@1: function theme_node_preview($node) { webmaster@1: $output = '
'; webmaster@1: webmaster@1: $preview_trimmed_version = FALSE; webmaster@1: // Do we need to preview trimmed version of post as well as full version? webmaster@1: if (isset($node->teaser) && isset($node->body)) { webmaster@1: $teaser = trim($node->teaser); webmaster@1: $body = trim(str_replace('', '', $node->body)); webmaster@1: webmaster@1: // Preview trimmed version if teaser and body will appear different; webmaster@1: // also (edge case) if both teaser and body have been specified by the user webmaster@1: // and are actually the same. webmaster@1: if ($teaser != $body || ($body && strpos($node->body, '') === 0)) { webmaster@1: $preview_trimmed_version = TRUE; webmaster@1: } webmaster@1: } webmaster@1: webmaster@1: if ($preview_trimmed_version) { webmaster@1: drupal_set_message(t('The trimmed version of your post shows what your post looks like when promoted to the main page or when exported for syndication. You can insert the delimiter "<!--break-->" (without the quotes) to fine-tune where your post gets split.')); webmaster@1: $output .= '

'. t('Preview trimmed version') .'

'; webmaster@1: $output .= node_view(drupal_clone($node), 1, FALSE, 0); webmaster@1: $output .= '

'. t('Preview full version') .'

'; webmaster@1: $output .= node_view($node, 0, FALSE, 0); webmaster@1: } webmaster@1: else { webmaster@1: $output .= node_view($node, 0, FALSE, 0); webmaster@1: } webmaster@1: $output .= "
\n"; webmaster@1: webmaster@1: return $output; webmaster@1: } webmaster@1: webmaster@1: function node_form_submit($form, &$form_state) { webmaster@1: global $user; webmaster@1: webmaster@1: $node = node_form_submit_build_node($form, $form_state); webmaster@1: $insert = empty($node->nid); webmaster@1: node_save($node); webmaster@1: $node_link = l(t('view'), 'node/'. $node->nid); webmaster@1: $watchdog_args = array('@type' => $node->type, '%title' => $node->title); webmaster@1: $t_args = array('@type' => node_get_types('name', $node), '%title' => $node->title); webmaster@1: webmaster@1: if ($insert) { webmaster@1: watchdog('content', '@type: added %title.', $watchdog_args, WATCHDOG_NOTICE, $node_link); webmaster@1: drupal_set_message(t('@type %title has been created.', $t_args)); webmaster@1: } webmaster@1: else { webmaster@1: watchdog('content', '@type: updated %title.', $watchdog_args, WATCHDOG_NOTICE, $node_link); webmaster@1: drupal_set_message(t('@type %title has been updated.', $t_args)); webmaster@1: } webmaster@1: if ($node->nid) { webmaster@1: unset($form_state['rebuild']); webmaster@1: $form_state['nid'] = $node->nid; webmaster@1: $form_state['redirect'] = 'node/'. $node->nid; webmaster@1: } webmaster@1: else { webmaster@1: // In the unlikely case something went wrong on save, the node will be webmaster@1: // rebuilt and node form redisplayed the same way as in preview. webmaster@1: drupal_set_message(t('The post could not be saved.'), 'error'); webmaster@1: } webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Build a node by processing submitted form values and prepare for a form rebuild. webmaster@1: */ webmaster@1: function node_form_submit_build_node($form, &$form_state) { webmaster@1: // Unset any button-level handlers, execute all the form-level submit webmaster@1: // functions to process the form values into an updated node. webmaster@1: unset($form_state['submit_handlers']); webmaster@1: form_execute_handlers('submit', $form, $form_state); webmaster@1: $node = node_submit($form_state['values']); webmaster@1: $form_state['node'] = (array)$node; webmaster@1: $form_state['rebuild'] = TRUE; webmaster@1: return $node; webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Menu callback -- ask for confirmation of node deletion webmaster@1: */ webmaster@1: function node_delete_confirm(&$form_state, $node) { webmaster@1: $form['nid'] = array( webmaster@1: '#type' => 'value', webmaster@1: '#value' => $node->nid, webmaster@1: ); webmaster@1: webmaster@1: return confirm_form($form, webmaster@1: t('Are you sure you want to delete %title?', array('%title' => $node->title)), webmaster@1: isset($_GET['destination']) ? $_GET['destination'] : 'node/'. $node->nid, webmaster@1: t('This action cannot be undone.'), webmaster@1: t('Delete'), webmaster@1: t('Cancel') webmaster@1: ); webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Execute node deletion webmaster@1: */ webmaster@1: function node_delete_confirm_submit($form, &$form_state) { webmaster@1: if ($form_state['values']['confirm']) { webmaster@1: node_delete($form_state['values']['nid']); webmaster@1: } webmaster@1: webmaster@1: $form_state['redirect'] = ''; webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Generate an overview table of older revisions of a node. webmaster@1: */ webmaster@1: function node_revision_overview($node) { webmaster@1: drupal_set_title(t('Revisions for %title', array('%title' => $node->title))); webmaster@1: webmaster@1: $header = array(t('Revision'), array('data' => t('Operations'), 'colspan' => 2)); webmaster@1: webmaster@1: $revisions = node_revision_list($node); webmaster@1: webmaster@1: $rows = array(); webmaster@1: $revert_permission = FALSE; webmaster@1: if ((user_access('revert revisions') || user_access('administer nodes')) && node_access('update', $node)) { webmaster@1: $revert_permission = TRUE; webmaster@1: } webmaster@1: $delete_permission = FALSE; webmaster@1: if ((user_access('delete revisions') || user_access('administer nodes')) && node_access('delete', $node)) { webmaster@1: $delete_permission = TRUE; webmaster@1: } webmaster@1: foreach ($revisions as $revision) { webmaster@1: $row = array(); webmaster@1: $operations = array(); webmaster@1: webmaster@1: if ($revision->current_vid > 0) { webmaster@1: $row[] = array('data' => t('!date by !username', array('!date' => l(format_date($revision->timestamp, 'small'), "node/$node->nid"), '!username' => theme('username', $revision))) webmaster@1: . (($revision->log != '') ? '

'. filter_xss($revision->log) .'

' : ''), webmaster@1: 'class' => 'revision-current'); webmaster@1: $operations[] = array('data' => theme('placeholder', t('current revision')), 'class' => 'revision-current', 'colspan' => 2); webmaster@1: } webmaster@1: else { webmaster@1: $row[] = t('!date by !username', array('!date' => l(format_date($revision->timestamp, 'small'), "node/$node->nid/revisions/$revision->vid/view"), '!username' => theme('username', $revision))) webmaster@1: . (($revision->log != '') ? '

'. filter_xss($revision->log) .'

' : ''); webmaster@1: if ($revert_permission) { webmaster@1: $operations[] = l(t('revert'), "node/$node->nid/revisions/$revision->vid/revert"); webmaster@1: } webmaster@1: if ($delete_permission) { webmaster@1: $operations[] = l(t('delete'), "node/$node->nid/revisions/$revision->vid/delete"); webmaster@1: } webmaster@1: } webmaster@1: $rows[] = array_merge($row, $operations); webmaster@1: } webmaster@1: webmaster@1: return theme('table', $header, $rows); webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Ask for confirmation of the reversion to prevent against CSRF attacks. webmaster@1: */ webmaster@1: function node_revision_revert_confirm($form_state, $node_revision) { webmaster@1: $form['#node_revision'] = $node_revision; webmaster@1: return confirm_form($form, t('Are you sure you want to revert to the revision from %revision-date?', array('%revision-date' => format_date($node_revision->revision_timestamp))), 'node/'. $node_revision->nid .'/revisions', '', t('Revert'), t('Cancel')); webmaster@1: } webmaster@1: webmaster@1: function node_revision_revert_confirm_submit($form, &$form_state) { webmaster@1: $node_revision = $form['#node_revision']; webmaster@1: $node_revision->revision = 1; webmaster@1: $node_revision->log = t('Copy of the revision from %date.', array('%date' => format_date($node_revision->revision_timestamp))); webmaster@1: if (module_exists('taxonomy')) { webmaster@1: $node_revision->taxonomy = array_keys($node_revision->taxonomy); webmaster@1: } webmaster@1: webmaster@1: node_save($node_revision); webmaster@1: webmaster@1: watchdog('content', '@type: reverted %title revision %revision.', array('@type' => $node_revision->type, '%title' => $node_revision->title, '%revision' => $node_revision->vid)); webmaster@1: drupal_set_message(t('@type %title has been reverted back to the revision from %revision-date.', array('@type' => node_get_types('name', $node_revision), '%title' => $node_revision->title, '%revision-date' => format_date($node_revision->revision_timestamp)))); webmaster@1: $form_state['redirect'] = 'node/'. $node_revision->nid .'/revisions'; webmaster@1: } webmaster@1: webmaster@1: function node_revision_delete_confirm($form_state, $node_revision) { webmaster@1: $form['#node_revision'] = $node_revision; webmaster@1: return confirm_form($form, t('Are you sure you want to delete the revision from %revision-date?', array('%revision-date' => format_date($node_revision->revision_timestamp))), 'node/'. $node_revision->nid .'/revisions', t('This action cannot be undone.'), t('Delete'), t('Cancel')); webmaster@1: } webmaster@1: webmaster@1: function node_revision_delete_confirm_submit($form, &$form_state) { webmaster@1: $node_revision = $form['#node_revision']; webmaster@1: db_query("DELETE FROM {node_revisions} WHERE nid = %d AND vid = %d", $node_revision->nid, $node_revision->vid); webmaster@1: node_invoke_nodeapi($node_revision, 'delete revision'); webmaster@1: watchdog('content', '@type: deleted %title revision %revision.', array('@type' => $node_revision->type, '%title' => $node_revision->title, '%revision' => $node_revision->vid)); webmaster@1: drupal_set_message(t('Revision from %revision-date of @type %title has been deleted.', array('%revision-date' => format_date($node_revision->revision_timestamp), '@type' => node_get_types('name', $node_revision), '%title' => $node_revision->title))); webmaster@1: $form_state['redirect'] = 'node/'. $node_revision->nid; webmaster@1: if (db_result(db_query('SELECT COUNT(vid) FROM {node_revisions} WHERE nid = %d', $node_revision->nid)) > 1) { webmaster@1: $form_state['redirect'] .= '/revisions'; webmaster@1: } webmaster@1: }