diff --git a/wp-admin/admin-functions.php b/wp-admin/admin-functions.php index 91df571a8d..3aa22f9118 100644 --- a/wp-admin/admin-functions.php +++ b/wp-admin/admin-functions.php @@ -60,9 +60,19 @@ function write_post() { $post_ID = wp_insert_post($_POST); add_meta($post_ID); + // Reunite any orphaned subposts with their parent + if ( $_POST['temp_ID'] ) + relocate_children($_POST['temp_ID'], $post_ID); + return $post_ID; } +// Move child posts to a new parent +function relocate_children($old_ID, $new_ID) { + global $wpdb; + $wpdb->query("UPDATE $wpdb->posts SET post_parent = $new_ID WHERE post_parent = $old_ID"); +} + // Update an existing post with values provided in $_POST. function edit_post() { global $user_ID; @@ -1739,4 +1749,46 @@ function current_theme_info() { $ct->author = $themes[$current_theme]['Author']; return $ct; } -?> \ No newline at end of file + +// Returns an array containing the current upload directory's path and url, or an error message. +function wp_upload_dir() { + if ( defined('UPLOADS') ) + $dir = UPLOADS; + else + $dir = 'wp-content/uploads'; + + $path = ABSPATH . $dir; + + // Make sure we have an uploads dir + if ( ! file_exists( $path ) ) { + if ( ! mkdir( $path ) ) + return array('error' => "Unable to create directory $path. Is its parent directory writable by the server?"); + @ chmod( ABSPATH . $path, 0774 ); + } + + // Generate the yearly and monthly dirs + $time = current_time( 'mysql' ); + $y = substr( $time, 0, 4 ); + $m = substr( $time, 5, 2 ); + $pathy = "$path/$y"; + $pathym = "$path/$y/$m"; + + // Make sure we have a yearly dir + if ( ! file_exists( $pathy ) ) { + if ( ! mkdir( $pathy ) ) + return array('error' => "Unable to create directory $pathy. Is $path writable?"); + @ chmod( $pathy, 0774 ); + } + + // Make sure we have a monthly dir + if ( ! file_exists( $pathym ) ) { + if ( ! mkdir( $pathym ) ) + return array('error' => "Unable to create directory $pathym. Is $pathy writable?"); + @ chmod( $pathym, 0774 ); + } + + $uploads = array('path' => $pathym, 'url' => get_bloginfo('home') . "/$dir/$y/$m", 'error' => false); + return apply_filters('upload_dir', $uploads); +} + +?> diff --git a/wp-admin/edit-form-advanced.php b/wp-admin/edit-form-advanced.php index c780571806..545b350555 100644 --- a/wp-admin/edit-form-advanced.php +++ b/wp-admin/edit-form-advanced.php @@ -17,6 +17,8 @@ $messages[3] = __('Custom field deleted.'); if (0 == $post_ID) { $form_action = 'post'; + $temp_ID = -1 * time(); + $form_extra = ""; } else { $form_action = 'editpost'; $form_extra = ""; @@ -172,6 +174,11 @@ if ('publish' != $post_status || 0 == $post_ID) {
+
+

+
+
+

@@ -213,4 +220,4 @@ if($metadata = has_meta($post_ID)) {
- \ No newline at end of file + diff --git a/wp-admin/image-uploading.php b/wp-admin/image-uploading.php new file mode 100644 index 0000000000..5e8ff0b236 --- /dev/null +++ b/wp-admin/image-uploading.php @@ -0,0 +1,332 @@ + IMAGETYPE_GIF, 'jpg' => IMAGETYPE_JPEG, 'png' => IMAGETYPE_PNG); + +// Define the error messages for bad uploads. +$upload_err = array(false, + "The uploaded file exceeds the upload_max_filesize directive in php.ini.", + "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.", + "The uploaded file was only partially uploaded.", + "No file was uploaded.", + "Missing a temporary folder.", + "Failed to write file to disk."); + +$iuerror = false; + +// Failing any single one of the following tests is fatal. + +// A correct form post will pass this test. +if ( !isset($_POST['action']) || $_POST['action'] != 'save' || count($_FILES) != 1 || ! isset($_FILES['image']) || is_array($_FILES['image']['name']) ) + $error = 'Invalid form submission. Only submit approved forms.'; + +// A successful upload will pass this test. +elseif ( $_FILES['image']['error'] > 0 ) + $error = $upload_err[$_FILES['image']['error']]; + +// A non-empty file will pass this test. +elseif ( 0 == $_FILES['image']['size'] ) + $error = 'File is empty. Please upload something more substantial.'; + +// A correct MIME category will pass this test. Full types are not consistent across browsers. +elseif ( ! 'image/' == substr($_FILES['image']['type'], 0, 6) ) + $error = 'Bad MIME type submitted by your browser.'; + +// An acceptable file extension will pass this test. +elseif ( ! ( ( 0 !== preg_match('#\.?([^\.]*)$#', $_FILES['image']['name'], $matches) ) && ( $ext = strtolower($matches[1]) ) && array_key_exists($ext, $exts) ) ) + $error = 'Bad file extension.'; + +// A valid uploaded file will pass this test. +elseif ( ! is_uploaded_file($_FILES['image']['tmp_name']) ) + $error = 'Bad temp file. Try renaming the file and uploading again.'; + +// A valid image file will pass this test. +elseif ( function_exists('exif_imagetype') && $exts[$ext] != $imagetype = exif_imagetype($_FILES['image']['tmp_name']) ) + $error = 'Bad image file. Try again, or try recreating it.'; + +// An image with at least one pixel will pass this test. +elseif ( ! ( ( $imagesize = getimagesize($_FILES['image']['tmp_name']) ) && $imagesize[0] > 1 && $imagesize[1] > 1 ) ) + $error = 'The image has no pixels. Isn\'t that odd?'; + +// A writable uploads dir will pass this test. +elseif ( ! ( ( $uploads = wp_upload_dir() ) && false === $uploads['error'] ) ) + $error = $uploads['error']; + +if ( $error ) + // Something wasn't right. Abort and never touch the temp file again. + die("$error Back to Image Uploading"); + +// Increment the file number until we have a unique file to save in $dir +$number = ''; +$filename = $_FILES['image']['name']; +while ( file_exists($uploads['path'] . "/$filename") ) + $filename = str_replace("$number.$ext", ++$number . ".$ext", $filename); + +// Move the file to the uploads dir +$file = $uploads['path'] . "/$filename"; +move_uploaded_file($_FILES['image']['tmp_name'], $file); +chmod($file, 0775); + +// Compute the URL +$url = $uploads['url'] . "/$filename"; + +// Construct the object array +$object = array( + 'post_title' => $imgtitle ? $imgtitle : $filename, + 'post_content' => $descr, + 'post_status' => 'object', + 'post_parent' => $post, + 'post_type' => $_FILES['image']['type'], + 'guid' => $url + ); + +// Save the data +$id = wp_attach_object($object, $post); + +// Generate the object's postmeta. +$imagesize = getimagesize($file); +$imagedata['width'] = $imagesize['0']; +$imagedata['height'] = $imagesize['1']; +if ( $imagedata['height'] < 96 && $imagedata['width'] < 128 ) { + $uheight = $imagedata['height']; + $uwidth = $imagedata['width']; +} elseif ( $imagedata['width'] / $imagedata['height'] > 4 / 3 ) { + $uwidth = 128; + $uheight = $imagedata['height'] / $imagedata['width'] * $uwidth; +} else { + $uheight = 96; + $uwidth = $imagedata['width'] / $imagedata['height'] * $uheight; +} +$imagedata['hwstring_small'] = "height='$uheight' width='$uwidth'"; +$imagedata['file'] = $file; + +if ( false == add_post_meta($id, 'imagedata', $imagedata) ) + die("failed to add_post_meta"); + +header("Location: ".basename(__FILE__)."?post=$post&all=$all&action=view&last=true"); +die; + +case 'upload': +?> + + + + + + + +
+
+
+
+ + + +
+ + +
+
+ + +get_var("SELECT count(ID) FROM $wpdb->posts WHERE post_status = 'object' AND left(post_type, 5) = 'image' $and_post") - 5; +else + $start = (int) $start; + +if ( $start < 0 ) + $start = 0; + +if ( '' == $sort ) + $sort = "ID"; + +$images = $wpdb->get_results("SELECT ID, post_date, post_title, guid FROM $wpdb->posts WHERE post_status = 'object' AND left(post_type, 5) = 'image' $and_post ORDER BY $sort LIMIT $start, 10", ARRAY_A); + +//if ( count($images) == 0 ) +// header("Location: ".basename(__FILE__)."?post=$post&all=$all&action=upload"); + +if ( count($images) > 5 ) { + $next = $start + count($images) - 5; +} else { + $next = false; +} + +if ( $start > 0 ) { + $back = $start - 5; + if ( $back < 1 ) + $back = '0'; +} else { + $back = false; +} + +?> + + + + + + +
+ 0 ) { + $imagerow = ''; + $i = 1; + foreach ( $images as $image ) { + if ( $i++ > 5 ) break; + $image = array_merge($image, get_post_meta($image['ID'], 'imagedata', true) ); +?> + + <?php echo $image['post_title']; ?> /> + + +
+
+
+ + + + + /> +
+
+ + + + + /> +
+
+ + + + +
+ +
+ + + + +
+ +
+ + + + +
+ +
+ + + + + /> +
+
+ + + + + /> +
+
+".print_r($images,1).""; +?> + + + diff --git a/wp-admin/upgrade-schema.php b/wp-admin/upgrade-schema.php index 7093077ab7..a6df3d5b82 100644 --- a/wp-admin/upgrade-schema.php +++ b/wp-admin/upgrade-schema.php @@ -119,6 +119,7 @@ CREATE TABLE $wpdb->posts ( post_parent bigint(20) NOT NULL default '0', guid varchar(255) NOT NULL default '', menu_order int(11) NOT NULL default '0', + post_type varchar(100) NOT NULL, PRIMARY KEY (ID), KEY post_name (post_name) ); diff --git a/wp-admin/wp-admin.css b/wp-admin/wp-admin.css index df6f34e288..895e12d292 100644 --- a/wp-admin/wp-admin.css +++ b/wp-admin/wp-admin.css @@ -148,7 +148,7 @@ p, li, dl, dd, dt { line-height: 130%; } -textarea, input, select { +textarea, input, select, iframe#imageup { background: #f4f4f4; border: 1px solid #b2b2b2; color: #000; @@ -157,6 +157,14 @@ textarea, input, select { padding: 3px; } +iframe#imageup { + margin: 0px; + padding: 0px; + border: 1px solid #ccc; + height: 13em; + width: 98%; +} + .alignleft { float: left } diff --git a/wp-includes/functions-post.php b/wp-includes/functions-post.php index b4a221dae6..8b52f5856c 100644 --- a/wp-includes/functions-post.php +++ b/wp-includes/functions-post.php @@ -128,9 +128,9 @@ function wp_insert_post($postarr = array()) { } else { $postquery = "INSERT INTO $wpdb->posts - (ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, post_modified, post_modified_gmt, post_parent, menu_order) + (ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, post_modified, post_modified_gmt, post_parent, menu_order, post_type) VALUES - ('$post_ID', '$post_author', '$post_date', '$post_date_gmt', '$post_content', '$post_title', '$post_excerpt', '$post_status', '$comment_status', '$ping_status', '$post_password', '$post_name', '$to_ping', '$post_date', '$post_date_gmt', '$post_parent', '$menu_order')"; + ('$post_ID', '$post_author', '$post_date', '$post_date_gmt', '$post_content', '$post_title', '$post_excerpt', '$post_status', '$comment_status', '$ping_status', '$post_password', '$post_name', '$to_ping', '$post_date', '$post_date_gmt', '$post_parent', '$menu_order', '$post_type')"; } $result = $wpdb->query($postquery); @@ -185,6 +185,124 @@ function wp_insert_post($postarr = array()) { return $post_ID; } +function wp_attach_object($object, $post_parent = 0) { + global $wpdb, $user_ID; + + // Export array as variables + extract($object); + + // Get the basics. + $post_content = apply_filters('content_save_pre', $post_content); + $post_excerpt = apply_filters('excerpt_save_pre', $post_excerpt); + $post_title = apply_filters('title_save_pre', $post_title); + $post_category = apply_filters('category_save_pre', $post_category); + $post_name = apply_filters('name_save_pre', $post_name); + $comment_status = apply_filters('comment_status_pre', $comment_status); + $ping_status = apply_filters('ping_status_pre', $ping_status); + $post_type = apply_filters('post_type_pre', $post_type); + + // Make sure we set a valid category + if (0 == count($post_category) || !is_array($post_category)) { + $post_category = array(get_option('default_category')); + } + $post_cat = $post_category[0]; + + if ( empty($post_author) ) + $post_author = $user_ID; + + $post_status = 'object'; + + // Get the post ID. + if ( $update ) { + $post_ID = $ID; + } else { + $id_result = $wpdb->get_row("SHOW TABLE STATUS LIKE '$wpdb->posts'"); + $post_ID = $id_result->Auto_increment; + } + + // Create a valid post name. + if ( empty($post_name) ) { + $post_name = sanitize_title($post_title, $post_ID); + } else { + $post_name = sanitize_title($post_name, $post_ID); + } + + if (empty($post_date)) + $post_date = current_time('mysql'); + if (empty($post_date_gmt)) + $post_date_gmt = current_time('mysql', 1); + + if ( empty($comment_status) ) { + if ( $update ) + $comment_status = 'closed'; + else + $comment_status = get_settings('default_comment_status'); + } + if ( empty($ping_status) ) + $ping_status = get_settings('default_ping_status'); + if ( empty($post_pingback) ) + $post_pingback = get_option('default_pingback_flag'); + + if ( isset($to_ping) ) + $to_ping = preg_replace('|\s+|', "\n", $to_ping); + else + $to_ping = ''; + + $post_parent = (int) $post_parent; + + if ( isset($menu_order) ) + $menu_order = (int) $menu_order; + else + $menu_order = 0; + + if ( !isset($post_password) ) + $post_password = ''; + + if ($update) { + $postquery = + "UPDATE $wpdb->posts SET + post_author = '$post_author', + post_date = '$post_date', + post_date_gmt = '$post_date_gmt', + post_content = '$post_content', + post_title = '$post_title', + post_excerpt = '$post_excerpt', + post_status = '$post_status', + comment_status = '$comment_status', + ping_status = '$ping_status', + post_password = '$post_password', + post_name = '$post_name', + to_ping = '$to_ping', + post_modified = '$post_date', + post_modified_gmt = '$post_date_gmt', + post_parent = '$post_parent', + menu_order = '$menu_order', + post_type = '$post_type', + guid = '$guid' + WHERE ID = $post_ID"; + } else { + $postquery = + "INSERT INTO $wpdb->posts + (ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, post_modified, post_modified_gmt, post_parent, menu_order, post_type, guid) + VALUES + ('$post_ID', '$post_author', '$post_date', '$post_date_gmt', '$post_content', '$post_title', '$post_excerpt', '$post_status', '$comment_status', '$ping_status', '$post_password', '$post_name', '$to_ping', '$post_date', '$post_date_gmt', '$post_parent', '$menu_order', '$post_type', '$guid')"; + } + + $result = $wpdb->query($postquery); + + wp_set_post_cats('', $post_ID, $post_category); + + clean_post_cache($post_ID); + + if ( $update) { + do_action('edit_object', $post_ID); + } else { + do_action('attach_object', $post_ID); + } + + return $post_ID; +} + function wp_get_single_post($postid = 0, $mode = OBJECT) { global $wpdb;