4 / 3 ) return array(128, (int) ($height / $width * 128)); else return array((int) ($width / $height * 96), 96); } switch($action) { case 'save': // Define acceptable image extentions/types here. Tests will apply strtolower(). $exts = array('gif' => 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']; list($uwidth, $uheight) = get_udims($imagedata['width'], $imagedata['height']); $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': $current_1 = ' class="current"'; $back = $next = false; break; case 'view': // How many images do we show? How many do we query? $num = 5; $double = $num * 2; if ( $post && empty($all) ) { $and_post = "AND post_parent = '$post'"; $current_2 = ' class="current"'; } else { $current_3 = ' class="current"'; } if ( $last ) $start = $wpdb->get_var("SELECT count(ID) FROM $wpdb->posts WHERE post_status = 'object' AND left(post_type, 5) = 'image' $and_post") - $num; 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, $double", ARRAY_A); if ( count($images) > $num ) { $next = $start + count($images) - $num; } else { $next = false; } if ( $start > 0 ) { $back = $start - $num; if ( $back < 1 ) $back = '0'; } else { $back = false; } $uwidth_sum = 0; $images_html = ''; if ( count($images) > 0 ) { $images = array_slice( $images, 0, $num ); foreach ( $images as $key => $image ) { $image = array_merge($image, get_post_meta($image['ID'], 'imagedata', true) ); list($image['uwidth'], $image['uheight']) = get_udims($image['width'], $image['height']); $uwidth_sum += $image['uwidth']; $images_html .= "
{$image[
\n"; } } $images_width = $uwidth_sum + ( count($images) * 5 ) + 15; break; default: die('This script was not meant to be called directly.'); } ?> Drag and drop photos to post Click photos for more options
Duplicated filenames will be numbered (photo.jpg, photo1.jpg, etc.)