=== modified file 'includes/common.inc' --- includes/common.inc +++ includes/common.inc @@ -1108,6 +1108,19 @@ function drupal_page_footer() { } /** + * Insert an element into the specified position of the input array + * See http://www.php.net/manual/en/function.array-splice.php#56794 + * + * @param array $array + * @param integer $position + * @param mixed $insert_array + */ +function drupal_array_insert (&$array, $position, $insert_array) { + $first_array = array_splice ($array, 0, $position); + $array = array_merge ($first_array, $insert_array, $array); +} + +/** * Form an associative array from a linear array. * * This function walks through the provided array and constructs an associative === modified file 'modules/book/book.module' --- modules/book/book.module +++ modules/book/book.module @@ -186,18 +186,18 @@ function book_load($node) { return db_fetch_object(db_query('SELECT * FROM {book} WHERE vid = %d', $node->vid)); } -/** - * Implementation of hook_insert(). - */ -function book_insert($node) { - db_query("INSERT INTO {book} (nid, vid, parent, weight) VALUES (%d, %d, %d, %d)", $node->nid, $node->vid, $node->parent, $node->weight); +function book_form_alter($form_id, &$form) { + if ($form_id == 'book_node_form') { + drupal_array_insert($form['#submit'], 1, array('book_node_submit' => array())); + } + elseif ($form_id == 'node_delete_confirm') { + $form['#submit']['book_node_delete_confirm_submit'] = array(); + } } -/** - * Implementation of hook_update(). - */ -function book_update($node) { - if ($node->revision) { +function book_node_submit($form_id, $node) { + $node = (object)$node; + if ($node->is_new || $node->revision) { db_query("INSERT INTO {book} (nid, vid, parent, weight) VALUES (%d, %d, %d, %d)", $node->nid, $node->vid, $node->parent, $node->weight); } else { @@ -205,11 +205,8 @@ function book_update($node) { } } -/** - * Implementation of hook_delete(). - */ -function book_delete(&$node) { - db_query('DELETE FROM {book} WHERE nid = %d', $node->nid); +function book_node_delete_confirm_submit($form_id, $form_values) { + db_query('DELETE FROM {book} WHERE nid = %d OR parent = %d', $form_values['node']->nid, $form_values['node']->nid); } /** @@ -480,9 +477,6 @@ function book_nodeapi(&$node, $op, $teas case 'delete revision': db_query('DELETE FROM {book} WHERE vid = %d', $node->vid); break; - case 'delete': - db_query('DELETE FROM {book} WHERE nid = %d', $node->nid); - break; } } === modified file 'modules/comment/comment.module' --- modules/comment/comment.module +++ modules/comment/comment.module @@ -276,6 +276,7 @@ function comment_form_alter($form_id, &$ } elseif (isset($form['type'])) { if ($form['type']['#value'] .'_node_form' == $form_id) { + $form['#submit']['comment_node_submit'] = array(); $node = $form['#node']; if (user_access('administer comments')) { $form['comment_settings'] = array( @@ -300,6 +301,10 @@ function comment_form_alter($form_id, &$ } } } + + if ($form_id == 'node_delete_confirm') { + $form['#submit']['comment_node_delete_confirm_submit'] = array(); + } } /** @@ -318,15 +323,6 @@ function comment_nodeapi(&$node, $op, $a } break; - case 'insert': - db_query('INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) VALUES (%d, %d, NULL, %d, 0)', $node->nid, $node->created, $node->uid); - break; - - case 'delete': - db_query('DELETE FROM {comments} WHERE nid = %d', $node->nid); - db_query('DELETE FROM {node_comment_statistics} WHERE nid = %d', $node->nid); - break; - case 'update index': $text = ''; $comments = db_query('SELECT subject, comment, format FROM {comments} WHERE nid = %d AND status = %d', $node->nid, COMMENT_PUBLISHED); @@ -349,6 +345,17 @@ function comment_nodeapi(&$node, $op, $a } } +function comment_node_delete_confirm_submit($form_id, $form_values) { + db_query('DELETE FROM {comments} WHERE nid = %d', $form_values['node']->nid); + db_query('DELETE FROM {node_comment_statistics} WHERE nid = %d', $form_values['node']->nid); +} + +function comment_node_submit($form_id, $node) { + if ($node->is_new) { + db_query('INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) VALUES (%d, %d, NULL, %d, 0)', $node->nid, $node->created, $node->uid); + } +} + /** * Implementation of hook_user(). * === modified file 'modules/forum/forum.module' --- modules/forum/forum.module +++ modules/forum/forum.module @@ -232,6 +232,37 @@ function forum_form_alter($form_id, &$fo unset($form['nodes']['forum']); } } + + if ($form_id == 'forum_node_form') { + // add custom callbacks to beginning of validate and submit stacks + drupal_array_insert($form['#validate'], 1, array('forum_node_validate' => array())); + drupal_array_insert($form['#submit'], 1, array('forum_node_submit' => array())); + } + + if ($form_id == 'node_delete_confirm' && $form['node']['#value']->type == 'forum') { + $form['#submit']['forum_node_delete_confirm_submit'] = array(); + } +} + +/** + * Check in particular that only a "leaf" term in the associated taxonomy + * vocabulary is selected, not a "container" term. + */ +function forum_node_validate($form_id, $node) { + $node = (object)$node; + if ($node->taxonomy) { + // Extract the node's proper topic ID. + $vocabulary = variable_get('forum_nav_vocabulary', ''); + $containers = variable_get('forum_containers', array()); + foreach ($node->taxonomy as $term) { + if (db_result(db_query('SELECT COUNT(*) FROM {term_data} WHERE tid = %d AND vid = %d', $term, $vocabulary))) { + if (in_array($term, $containers)) { + $term = taxonomy_get_term($term); + form_set_error('taxonomy', t('The item %forum is only a container for forums. Please select one of the forums below it.', array('%forum' => theme('placeholder', $term->name)))); + } + } + } + } } /** @@ -358,32 +389,8 @@ function forum_submit(&$node) { } } -/** - * Implementation of hook_validate(). - * - * Check in particular that only a "leaf" term in the associated taxonomy - * vocabulary is selected, not a "container" term. - */ -function forum_validate($node) { - if ($node->taxonomy) { - // Extract the node's proper topic ID. - $vocabulary = variable_get('forum_nav_vocabulary', ''); - $containers = variable_get('forum_containers', array()); - foreach ($node->taxonomy as $term) { - if (db_result(db_query('SELECT COUNT(*) FROM {term_data} WHERE tid = %d AND vid = %d', $term, $vocabulary))) { - if (in_array($term, $containers)) { - $term = taxonomy_get_term($term); - form_set_error('taxonomy', t('The item %forum is only a container for forums. Please select one of the forums below it.', array('%forum' => theme('placeholder', $term->name)))); - } - } - } - } -} - -/** - * Implementation of hook_update(). - */ -function forum_update($node) { +function forum_node_submit($form_id, $node) { + $node = (object)$node; if ($node->revision) { db_query("INSERT INTO {forum} (nid, vid, tid) VALUES (%d, %d, %d)", $node->nid, $node->vid, $node->tid); } @@ -423,18 +430,8 @@ function forum_prepare(&$node) { } } -/** - * Implementation of hook_insert(). - */ -function forum_insert($node) { - db_query('INSERT INTO {forum} (nid, vid, tid) VALUES (%d, %d, %d)', $node->nid, $node->vid, $node->tid); -} - -/** - * Implementation of hook_delete(). - */ -function forum_delete(&$node) { - db_query('DELETE FROM {forum} WHERE nid = %d', $node->nid); +function forum_node_delete_confirm_submit($form_id, $form_values) { + db_query('DELETE FROM {forum} WHERE nid = %d', $form_values['node']->nid); } /** === modified file 'modules/menu/menu.module' --- modules/menu/menu.module +++ modules/menu/menu.module @@ -144,31 +144,20 @@ function menu_block($op = 'list', $delta } } -/** - * Implementation of hook_nodeapi(). - */ -function menu_nodeapi(&$node, $op) { - - if (user_access('administer menu')) { - switch ($op) { - case 'insert': - case 'update': - if ($node->menu['delete']) { - menu_node_form_delete($node); - menu_rebuild(); - } - elseif ($node->menu['title']) { - $node->menu['path'] = ($node->menu['path']) ? $node->menu['path'] : "node/$node->nid"; - menu_edit_item_save($node->menu); - menu_rebuild(); - } - break; +function menu_node_delete_confirm_submit($form_id, $form_values) { + menu_node_form_delete($form_values['node']); + menu_rebuild(); +} - case 'delete': - menu_node_form_delete($node); - menu_rebuild(); - break; - } +function menu_node_submit($form_id, $node) { + if ($node->menu['delete']) { + menu_node_form_delete($node); + menu_rebuild(); + } + elseif ($node->menu['title']) { + $node->menu['path'] = ($node->menu['path']) ? $node->menu['path'] : "node/$node->nid"; + menu_edit_item_save($node->menu); + menu_rebuild(); } } @@ -195,6 +184,8 @@ function menu_form_alter($form_id, &$for $item = !is_array($item) ? $edit['menu'] : (($_POST['op'] == t('Preview')) ? array_merge($item, $edit['menu']) : array_merge($edit['menu'], $item)); } } + + $form['#submit']['menu_node_submit'] = array(); $form['menu'] = array('#type' => 'fieldset', '#title' => t('Menu settings'), @@ -255,6 +246,10 @@ function menu_form_alter($form_id, &$for ); } } + + if ($form_id == 'node_delete_confirm') { + $form['#submit']['menu_node_delete_confirm_submit'] = array(); + } } /** === modified file 'modules/node/node.module' --- modules/node/node.module +++ modules/node/node.module @@ -601,16 +601,6 @@ function node_save(&$node) { db_query($node_query, $node_table_values); db_query($revisions_query, $revisions_table_values); - // Call the node specific callback (if any): - if ($node->is_new) { - node_invoke($node, 'insert'); - node_invoke_nodeapi($node, 'insert'); - } - else { - node_invoke($node, 'update'); - node_invoke_nodeapi($node, 'update'); - } - // Update the node access table for this node. node_access_acquire_grants($node); @@ -1781,7 +1771,7 @@ function node_submit($node) { } } - // Do node-type-specific validation checks. + // Let modules make changes before saving. Node has been validated and is guaranteed to be saved momentarily. node_invoke($node, 'submit'); node_invoke_nodeapi($node, 'submit'); @@ -1822,10 +1812,6 @@ function node_validate($node, $form = ar form_set_error('date', t('You have to specify a valid date.')); } } - - // Do node-type-specific validation checks. - node_invoke($node, 'validate', $form); - node_invoke_nodeapi($node, 'validate', $form); } function node_form_validate($form_id, $form_values, $form) { @@ -2105,11 +2091,10 @@ function theme_node_log_message($log) { return '
'. t('Log') .':
'. $log .'
'; } -function node_form_submit($form_id, $edit) { +function node_form_submit($form_id, &$node) { global $user; - // Fix up the node when required: - $node = node_submit($edit); + $node = node_submit($node); // Prepare the node's body: if ($node->nid) { @@ -2150,14 +2135,11 @@ function node_delete_confirm() { $edit['nid'] = $edit['nid'] ? $edit['nid'] : arg(1); $node = node_load($edit['nid']); - if (node_access('delete', $node)) { - $form['nid'] = array('#type' => 'value', '#value' => $node->nid); - $output = confirm_form('node_delete_confirm', $form, - t('Are you sure you want to delete %title?', array('%title' => theme('placeholder', $node->title))), - $_GET['destination'] ? $_GET['destination'] : 'node/'. $node->nid, t('This action cannot be undone.'), - t('Delete'), t('Cancel') ); - } - + $form['node'] = array('#type' => 'value', '#value' => $node); + $output = confirm_form('node_delete_confirm', $form, + t('Are you sure you want to delete %title?', array('%title' => theme('placeholder', $node->title))), + $_GET['destination'] ? $_GET['destination'] : 'node/'. $node->nid, t('This action cannot be undone.'), + t('Delete'), t('Cancel') ); return $output; } @@ -2165,10 +2147,7 @@ function node_delete_confirm() { * Execute node deletion */ function node_delete_confirm_submit($form_id, $form_values) { - if ($form_values['confirm']) { - node_delete($form_values['nid']); - } - + node_delete($form_values['node']->nid); return ''; } @@ -2183,10 +2162,6 @@ function node_delete($nid) { db_query('DELETE FROM {node} WHERE nid = %d', $node->nid); db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid); - // Call the node-specific callback (if any): - node_invoke($node, 'delete'); - node_invoke_nodeapi($node, 'delete'); - // Clear the cache so an anonymous poster can see the node being deleted. cache_clear_all(); === modified file 'modules/path/path.module' --- modules/path/path.module +++ modules/path/path.module @@ -205,16 +205,6 @@ function path_form($edit = '') { function path_nodeapi(&$node, $op, $arg) { if (user_access('create url aliases') || user_access('administer url aliases')) { switch ($op) { - case 'validate': - $node->path = trim($node->path); - if ($node->path && !valid_url($node->path)) { - form_set_error('path', t('The path is invalid.')); - } - else if (db_result(db_query("SELECT COUNT(dst) FROM {url_alias} WHERE dst = '%s' AND src != '%s'", $node->path, "node/$node->nid"))) { - form_set_error('path', t('The path is already in use.')); - } - break; - case 'load': $path = "node/$node->nid"; // We don't use drupal_get_path_alias() to avoid custom rewrite functions. @@ -224,27 +214,37 @@ function path_nodeapi(&$node, $op, $arg) $node->path = db_result($result); } break; + } + } +} - case 'insert': - // Don't try to insert if path is NULL. We may have already set - // the alias ahead of time. - if ($node->path) { - path_set_alias("node/$node->nid", $node->path); - } - break; - - case 'update': - path_set_alias("node/$node->nid", $node->path, $node->pid); - break; +function path_node_delete_confirm_submit($form_id, $form_values) { + $path = 'node/'. $form_values['node']->nid; + if (drupal_get_path_alias($path) != $path) { + path_set_alias($path); + } +} - case 'delete': - $path = "node/$node->nid"; - if (drupal_get_path_alias($path) != $path) { - path_set_alias($path); - } - break; +function path_node_submit($form_id, $node) { + if ($node->is_new) { + // Don't try to insert if path is NULL. We may have already set the alias ahead of time. + if ($node->path) { + path_set_alias("node/$node->nid", $node->path); } } + else { + path_set_alias("node/$node->nid", $node->path, $node->pid); + } +} + +function path_node_validate($form_id, $node) { + $node['path'] = trim($node['path']); + if ($node['path'] && !valid_url($node['path'])) { + form_set_error('path', t('The path is invalid.')); + } + else if (db_result(db_query("SELECT COUNT(dst) FROM {url_alias} WHERE dst = '%s' AND src != '%s'", $node['path'], 'node/'. $node['nid']))) { + form_set_error('path', t('The path is already in use.')); + } } /** @@ -252,6 +252,9 @@ function path_nodeapi(&$node, $op, $arg) */ function path_form_alter($form_id, &$form) { if (user_access('create url aliases') && isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) { + $form['#validate']['path_node_validate'] = array(); + $form['#submit']['path_node_submit'] = array(); + $path = $form['#node']->path; $form['path'] = array( '#type' => 'fieldset', @@ -275,6 +278,10 @@ function path_form_alter($form_id, &$for ); } } + + if ($form_id == 'node_delete_confirm') { + $form['#submit']['path_node_delete_confirm_submit'] = array(); + } } === modified file 'modules/poll/poll.module' --- modules/poll/poll.module +++ modules/poll/poll.module @@ -78,13 +78,10 @@ function poll_cron() { } } -/** - * Implementation of hook_delete(). - */ -function poll_delete($node) { - db_query("DELETE FROM {poll} WHERE nid = %d", $node->nid); - db_query("DELETE FROM {poll_choices} WHERE nid = %d", $node->nid); - db_query("DELETE FROM {poll_votes} WHERE nid = %d", $node->nid); +function poll_node_delete_confirm_submit($form_id, $form_values) { + db_query("DELETE FROM {poll} WHERE nid = %d", $form_values['node']->nid); + db_query("DELETE FROM {poll_choices} WHERE nid = %d", $form_values['node']->nid); + db_query("DELETE FROM {poll_votes} WHERE nid = %d", $form_values['node']->nid); } /** @@ -96,28 +93,35 @@ function poll_submit(&$node) { $node->teaser = poll_teaser($node); } -/** - * Implementation of hook_validate(). - */ -function poll_validate($node) { - if (isset($node->title)) { - // Check for at least two options and validate amount of votes: - $realchoices = 0; - // Renumber fields - $node->choice = array_values($node->choice); - foreach ($node->choice as $i => $choice) { - if ($choice['chtext'] != '') { - $realchoices++; - } - if ($choice['chvotes'] < 0) { - form_set_error("choice][$i][chvotes", t('Negative values are not allowed.')); - } +function poll_node_validate($form_id, $node) { + $node = (object)$node; + // Check for at least two options and validate amount of votes: + $realchoices = 0; + // Renumber fields + $node->choice = array_values($node->choice); + foreach ($node->choice as $i => $choice) { + if ($choice['chtext'] != '') { + $realchoices++; } - - if ($realchoices < 2) { - form_set_error("choice][$realchoices][chtext", t('You must fill in at least two choices.')); + if ($choice['chvotes'] < 0) { + form_set_error("choice][$i][chvotes", t('Negative values are not allowed.')); } } + + if ($realchoices < 2) { + form_set_error("choice][$realchoices][chtext", t('You must fill in at least two choices.')); + } +} + +function poll_form_alter($form_id, &$form) { + if ($form_id == 'poll_node_form') { + // add custom callbacks to beginning of validate and submit stacks + drupal_array_insert($form['#validate'], 1, array('poll_node_validate' => array())); + drupal_array_insert($form['#submit'], 1, array('poll_node_submit' => array())); + } + elseif ($form_id == 'node_delete_confirm' && $form['node']['#value']->type == 'poll') { + $form['#submit']['poll_node_delete_confirm_submit'] = array(); + } } /** @@ -575,12 +579,18 @@ function poll_view($node, $teaser = FALS return $node; } -/** - * Implementation of hook_update(). - */ +function poll_node_submit($form_id, $node) { + $node = (object)$node; + if ($node->is_new) { + poll_insert($node); + } + else { + poll_update($node); + } +} + function poll_update($node) { db_query('UPDATE {poll} SET runtime = %d, active = %d WHERE nid = %d', $node->runtime, $node->active, $node->nid); - db_query('DELETE FROM {poll_choices} WHERE nid = %d', $node->nid); db_query('DELETE FROM {poll_votes} WHERE nid = %d', $node->nid); === modified file 'modules/statistics/statistics.module' --- modules/statistics/statistics.module +++ modules/statistics/statistics.module @@ -533,14 +533,13 @@ function _statistics_format_item($title, return $output; } -/** - * Implementation of hook_nodeapi(). - */ -function statistics_nodeapi(&$node, $op, $arg = 0) { - switch ($op) { - case 'delete': - // clean up statistics table when node is deleted - db_query('DELETE FROM {node_counter} WHERE nid = %d', $node->nid); +function statistics_node_delete_confirm_submit($form_id, $form_values) { + db_query('DELETE FROM {node_counter} WHERE nid = %d', $form_values['node']->nid); +} + +function statistics_form_alter($form_id, &$form) { + if ($form_id == 'node_delete_confirm') { + $form['#submit']['statistics_node_delete_confirm_submit'] = array(); } } === modified file 'modules/taxonomy/taxonomy.module' --- modules/taxonomy/taxonomy.module +++ modules/taxonomy/taxonomy.module @@ -601,8 +601,11 @@ function taxonomy_get_vocabularies($type */ function taxonomy_form_alter($form_id, &$form) { if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) { + // inject custom validate and submit handlers + $form['#validate']['taxonomy_node_validate'] = array(); + $form['#submit']['taxonomy_node_submit'] = array(); + $node = $form['#node']; - if (!isset($node->taxonomy)) { if ($node->nid) { $terms = taxonomy_node_get_terms($node->nid); @@ -667,6 +670,10 @@ function taxonomy_form_alter($form_id, & $form['taxonomy'] += array('#type' => 'fieldset', '#title' => t('Categories'), '#collapsible' => TRUE, '#collapsed' => FALSE, '#tree' => TRUE, '#weight' => -3); } } + + if ($form_id == 'node_delete_confirm') { + $form['#submit']['taxonomy_node_delete_confirm_submit'] = array(); + } } /** @@ -700,9 +707,9 @@ function taxonomy_node_get_terms($nid, $ /** * Make sure incoming vids are free tagging enabled. */ -function taxonomy_node_validate(&$node) { - if ($node->taxonomy) { - $terms = $node->taxonomy; +function taxonomy_node_validate($form_id, $node) { + if ($node['taxonomy']) { + $terms = $node['taxonomy']; if ($terms['tags']) { foreach ($terms['tags'] as $vid => $vid_value) { $vocabulary = taxonomy_get_vocabulary($vid); @@ -719,14 +726,14 @@ function taxonomy_node_validate(&$node) /** * Save term associations for a given node. */ -function taxonomy_node_save($nid, $terms) { - taxonomy_node_delete($nid); +function taxonomy_node_submit($form_id, $node) { + taxonomy_node_delete($node->nid); // Free tagging vocabularies do not send their tids in the form, // so we'll detect them here and process them independently. - if (isset($terms['tags'])) { - $typed_input = $terms['tags']; - unset($terms['tags']); + if (isset($node->taxonomy['tags'])) { + $typed_input = $node->taxonomy['tags']; + unset($node->taxonomy['tags']); foreach ($typed_input as $vid => $vid_value) { // This regexp allows the following types of user input: @@ -762,27 +769,27 @@ function taxonomy_node_save($nid, $terms // Defend against duplicate, different cased tags if (!isset($inserted[$typed_term_tid])) { - db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid); + db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $node->nid, $typed_term_tid); $inserted[$typed_term_tid] = TRUE; } } } } - if (is_array($terms)) { - foreach ($terms as $term) { + if (is_array($node->taxonomy)) { + foreach ($node->taxonomy as $term) { if (is_array($term)) { foreach ($term as $tid) { if ($tid) { - db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $tid); + db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $node->nid, $tid); } } } else if (is_object($term)) { - db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $term->tid); + db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $node->nid, $term->tid); } else if ($term) { - db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $term); + db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $node->nid, $term); } } } @@ -1159,18 +1166,6 @@ function taxonomy_nodeapi($node, $op, $a case 'load': $output['taxonomy'] = taxonomy_node_get_terms($node->nid); return $output; - case 'insert': - taxonomy_node_save($node->nid, $node->taxonomy); - break; - case 'update': - taxonomy_node_save($node->nid, $node->taxonomy); - break; - case 'delete': - taxonomy_node_delete($node->nid); - break; - case 'validate': - taxonomy_node_validate($node); - break; case 'rss item': return taxonomy_rss_item($node); case 'update index': @@ -1178,6 +1173,10 @@ function taxonomy_nodeapi($node, $op, $a } } +function taxonomy_node_confirm_delete_submit($form_id, $form_values) { + taxonomy_node_delete($form_values['node']->nid); +} + /** * Implementation of hook_nodeapi('update_index'). */ === modified file 'modules/upload/upload.module' --- modules/upload/upload.module +++ modules/upload/upload.module @@ -360,6 +360,8 @@ function upload_form_alter($form_id, &$f if (isset($form['type'])) { $node = $form['#node']; if ($form['type']['#value'] .'_node_form' == $form_id && variable_get("upload_$node->type", TRUE) && user_access('upload files')) { + $form['#validate']['upload_node_validate'] = array(); + $form['#submit']['upload_node_submit'] = array(); drupal_add_js('misc/progress.js'); drupal_add_js('misc/upload.js'); @@ -384,9 +386,14 @@ function upload_form_alter($form_id, &$f $form['#attributes']['enctype'] = 'multipart/form-data'; } } + + if ($form_id == 'node_delete_confirm') { + $form['#submit']['upload_node_delete_confirm_submit'] = array(); + } } -function _upload_validate(&$node) { +function upload_node_validate($form_id, $node) { + $node = (object)$node; // Accumulator for disk space quotas. $filesize = 0; @@ -478,10 +485,6 @@ function upload_nodeapi(&$node, $op, $te _upload_prepare($node); break; - case 'validate': - _upload_validate($node); - break; - case 'view': if (isset($node->files) && user_access('view uploaded files')) { // Add the attachments list to node body with a heavy @@ -516,18 +519,6 @@ function upload_nodeapi(&$node, $op, $te } } break; - - case 'insert': - case 'update': - if (user_access('upload files')) { - upload_save($node); - } - break; - - case 'delete': - upload_delete($node); - break; - case 'delete revision': upload_delete_revision($node); break; @@ -574,6 +565,12 @@ function upload_fix_preview_urls($elemen } } +function upload_node_submit($form_id, $node) { + if (user_access('upload files')) { + upload_save($node); + } +} + /** * Displays file attachments in table */ @@ -725,9 +722,9 @@ function upload_save($node) { } } -function upload_delete($node) { +function upload_node_delete_confirm_submit($form_id, $form_values) { $files = array(); - $result = db_query('SELECT * FROM {files} WHERE nid = %d', $node->nid); + $result = db_query('SELECT * FROM {files} WHERE nid = %d', $form_values['node']->nid); while ($file = db_fetch_object($result)) { $files[$file->fid] = $file; } @@ -739,7 +736,7 @@ function upload_delete($node) { } // Delete all files associated with the node - db_query('DELETE FROM {files} WHERE nid = %d', $node->nid); + db_query('DELETE FROM {files} WHERE nid = %d', $form_values['node']->nid); } function upload_delete_revision($node) { @@ -879,7 +876,7 @@ function upload_js() { // Handle new uploads, and merge tmp files into node-files. _upload_prepare($node); - _upload_validate($node); + upload_node_validate(NULL, $node); $form = _upload_form($node); foreach (module_implements('form_alter') as $module) { === modified file 'sites/default/settings.php' --- sites/default/settings.php +++ sites/default/settings.php @@ -84,7 +84,7 @@ * $db_url = 'mysqli://username:password@localhost/databasename'; * $db_url = 'pgsql://username:password@localhost/databasename'; */ -$db_url = 'mysql://username:password@localhost/databasename'; +$db_url = 'mysql://root:root@localhost%3A8889/bzrnodeapi'; $db_prefix = ''; /**