From d6ee6062a64e982c27d8b35a2058c16810d54fae Mon Sep 17 00:00:00 2001 From: ryan Date: Fri, 6 Mar 2009 00:50:19 +0000 Subject: [PATCH] Add some default field types. see #7171 git-svn-id: http://svn.automattic.com/wordpress/trunk@10725 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/post.php | 14 ++++---------- wp-includes/wp-db.php | 43 ++++++++++++++++++++++++++++++++----------- wp-settings.php | 6 ++++++ 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/wp-includes/post.php b/wp-includes/post.php index 39bde1507..accc3415c 100644 --- a/wp-includes/post.php +++ b/wp-includes/post.php @@ -1499,20 +1499,14 @@ function wp_insert_post($postarr = array(), $wp_error = false) { } // expected_slashed (everything!) - $fields = array( 'post_author' => '%d', 'post_date' => '%s', 'post_date_gmt' => '%s', 'post_content' => '%s', 'post_content_filtered' => '%s', 'post_title' => '%s', - 'post_excerpt' => '%s', 'post_status' => '%s', 'post_type' => '%s', 'comment_status' => '%s', 'ping_status' => '%s', 'post_password' => '%s', 'post_name' => '%s', - 'to_ping' => '%s', 'pinged' => '%s', 'post_modified' => '%s', 'post_modified_gmt' => '%s', 'post_parent' => '%d', 'menu_order' => '%d', 'guid' => '%s' ); - $data = compact( array_keys( $fields) ); - $data_formats = array_values( $fields ); + $data = compact( array( 'post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_content_filtered', 'post_title', 'post_excerpt', 'post_status', 'post_type', 'comment_status', 'ping_status', 'post_password', 'post_name', 'to_ping', 'pinged', 'post_modified', 'post_modified_gmt', 'post_parent', 'menu_order', 'guid' ) ); $data = apply_filters('wp_insert_post_data', $data, $postarr); $data = stripslashes_deep( $data ); - error_log(var_export($data, true)); $where = array( 'ID' => $post_ID ); - $where_formats = array('%d'); - if ( $update ) { + if ($update) { do_action( 'pre_post_update', $post_ID ); - if ( false === $wpdb->update( $wpdb->posts, $data, $where, $data_formats, $where_formats ) ) { + if ( false === $wpdb->update( $wpdb->posts, $data, $where ) ) { if ( $wp_error ) return new WP_Error('db_update_error', __('Could not update post in the database'), $wpdb->last_error); else @@ -1528,7 +1522,7 @@ function wp_insert_post($postarr = array(), $wp_error = false) { $data['ID'] = $import_id; } } - if ( false === $wpdb->insert( $wpdb->posts, $data, $data_formats ) ) { + if ( false === $wpdb->insert( $wpdb->posts, $data ) ) { if ( $wp_error ) return new WP_Error('db_insert_error', __('Could not insert post into the database'), $wpdb->last_error); else diff --git a/wp-includes/wp-db.php b/wp-includes/wp-db.php index 61f8f7eae..9b0a0b71b 100644 --- a/wp-includes/wp-db.php +++ b/wp-includes/wp-db.php @@ -702,15 +702,23 @@ class wpdb { * @param array|string $format The format of the field values. * @return mixed Results of $this->query() */ - function insert($table, $data, $format = '%s') { - $format = (array) $format; + function insert($table, $data, $format = null) { + global $db_field_types; + + $formats = $format = (array) $format; $fields = array_keys($data); $formatted_fields = array(); - foreach ( $data as $field ) { - $form = ( $form = array_shift($format) ) ? $form : $formatted_fields[0]; + foreach ( $fields as $field ) { + if ( !empty($format) ) + $form = ( $form = array_shift($formats) ) ? $form : $format[0]; + elseif ( isset($db_field_types[$field]) ) + $form = $db_field_types[$field]; + else + $form = '%s'; $formatted_fields[] = $form; } $sql = "INSERT INTO $table (`" . implode( '`,`', $fields ) . "`) VALUES ('" . implode( "','", $formatted_fields ) . "')"; + error_log($sql); return $this->query( $this->prepare( $sql, $data) ); } @@ -726,24 +734,37 @@ class wpdb { * @param array|string $where_format The format of the where field values. * @return mixed Results of $this->query() */ - function update($table, $data, $where, $format = '%s', $where_format = '%s') { + function update($table, $data, $where, $format = null, $where_format = null) { + global $db_field_types; + if ( !is_array( $where ) ) return false; $formats = $format = (array) $format; $bits = $wheres = array(); - foreach ( (array) array_keys($data) as $k ) { - $form = ( $form = array_shift($formats) ) ? $form : $format[0]; - $bits[] = "`$k` = {$form}"; + foreach ( (array) array_keys($data) as $field ) { + if ( !empty($format) ) + $form = ( $form = array_shift($formats) ) ? $form : $format[0]; + elseif ( isset($db_field_types[$field]) ) + $form = $db_field_types[$field]; + else + $form = '%s'; + $bits[] = "`$field` = {$form}"; } $where_formats = $where_format = (array) $where_format; - foreach ( $where as $c => $v ) { - $form = ( $form = array_shift($where_formats) ) ? $form : $where_format[0]; - $wheres[] = "$c = {$form}"; + foreach ( (array) array_keys($where) as $field ) { + if ( !empty($where_format) ) + $form = ( $form = array_shift($where_formats) ) ? $form : $where_format[0]; + elseif ( isset($db_field_types[$field]) ) + $form = $db_field_types[$field]; + else + $form = '%s'; + $wheres[] = "$field = {$form}"; } $sql = "UPDATE $table SET " . implode( ', ', $bits ) . ' WHERE ' . implode( ' AND ', $wheres ); + error_log($sql); return $this->query( $this->prepare( $sql, array_merge(array_values($data), array_values($where))) ); } diff --git a/wp-settings.php b/wp-settings.php index 718e973d5..8a6266971 100644 --- a/wp-settings.php +++ b/wp-settings.php @@ -247,6 +247,12 @@ require (ABSPATH . WPINC . '/compat.php'); require (ABSPATH . WPINC . '/functions.php'); require (ABSPATH . WPINC . '/classes.php'); +$db_field_types = array( 'post_author' => '%d', 'post_date' => '%s', 'post_date_gmt' => '%s', 'post_content' => '%s', 'post_content_filtered' => '%s', 'post_title' => '%s', + 'post_excerpt' => '%s', 'post_status' => '%s', 'post_type' => '%s', 'comment_status' => '%s', 'ping_status' => '%s', 'post_password' => '%s', 'post_name' => '%s', + 'to_ping' => '%s', 'pinged' => '%s', 'post_modified' => '%s', 'post_modified_gmt' => '%s', 'post_parent' => '%d', 'menu_order' => '%d', 'guid' => '%s', 'term_id' => '%d', + 'name' => '%s', 'slug' => '%s', 'term_group' => '%d', 'term_taxonomy_id' => '%d', 'description' => '%s', 'taxonomy' => '%s', 'parent' => '%d', 'count' => '%d', + 'object_id' => '%d', 'term_order' => '%d'); + require_wp_db(); if ( !empty($wpdb->error) )