diff -r 53cff4b4a802 -r bde1974c263b web/wp-admin/custom-header.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-admin/custom-header.php Wed Feb 03 15:37:20 2010 +0000
@@ -0,0 +1,478 @@
+admin_header_callback = $admin_header_callback;
+ }
+
+ /**
+ * Setup the hooks for the Custom Header admin page.
+ *
+ * @since unknown
+ */
+ function init() {
+ $page = add_theme_page(__('Custom Header'), __('Custom Header'), 'edit_themes', 'custom-header', array(&$this, 'admin_page'));
+
+ add_action("admin_print_scripts-$page", array(&$this, 'js_includes'));
+ add_action("admin_print_styles-$page", array(&$this, 'css_includes'));
+ add_action("admin_head-$page", array(&$this, 'take_action'), 50);
+ add_action("admin_head-$page", array(&$this, 'js'), 50);
+ add_action("admin_head-$page", $this->admin_header_callback, 51);
+ }
+
+ /**
+ * Get the current step.
+ *
+ * @since unknown
+ *
+ * @return int Current step
+ */
+ function step() {
+ if ( ! isset( $_GET['step'] ) )
+ return 1;
+
+ $step = (int) $_GET['step'];
+ if ( $step < 1 || 3 < $step )
+ $step = 1;
+
+ return $step;
+ }
+
+ /**
+ * Setup the enqueue for the JavaScript files.
+ *
+ * @since unknown
+ */
+ function js_includes() {
+ $step = $this->step();
+
+ if ( 1 == $step )
+ wp_enqueue_script('farbtastic');
+ elseif ( 2 == $step )
+ wp_enqueue_script('jcrop');
+ }
+
+ /**
+ * Setup the enqueue for the CSS files
+ *
+ * @since 2.7
+ */
+ function css_includes() {
+ $step = $this->step();
+
+ if ( 1 == $step )
+ wp_enqueue_style('farbtastic');
+ elseif ( 2 == $step )
+ wp_enqueue_style('jcrop');
+ }
+
+ /**
+ * Execute custom header modification.
+ *
+ * @since unknown
+ */
+ function take_action() {
+ if ( isset( $_POST['textcolor'] ) ) {
+ check_admin_referer('custom-header');
+ if ( 'blank' == $_POST['textcolor'] ) {
+ set_theme_mod('header_textcolor', 'blank');
+ } else {
+ $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['textcolor']);
+ if ( strlen($color) == 6 || strlen($color) == 3 )
+ set_theme_mod('header_textcolor', $color);
+ }
+ }
+ if ( isset($_POST['resetheader']) ) {
+ check_admin_referer('custom-header');
+ remove_theme_mods();
+ }
+ }
+
+ /**
+ * Execute Javascript depending on step.
+ *
+ * @since unknown
+ */
+ function js() {
+ $step = $this->step();
+ if ( 1 == $step )
+ $this->js_1();
+ elseif ( 2 == $step )
+ $this->js_2();
+ }
+
+ /**
+ * Display Javascript based on Step 1.
+ *
+ * @since unknown
+ */
+ function js_1() { ?>
+
+
+
+
+
+
+
+
+
+
+
%1$d x %2$d pixels will be used as-is.'), HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT); ?>
+
+
+
+
+
+
+
+ false);
+ $file = wp_handle_upload($_FILES['import'], $overrides);
+
+ if ( isset($file['error']) )
+ die( $file['error'] );
+
+ $url = $file['url'];
+ $type = $file['type'];
+ $file = $file['file'];
+ $filename = basename($file);
+
+ // Construct the object array
+ $object = array(
+ 'post_title' => $filename,
+ 'post_content' => $url,
+ 'post_mime_type' => $type,
+ 'guid' => $url);
+
+ // Save the data
+ $id = wp_insert_attachment($object, $file);
+
+ list($width, $height, $type, $attr) = getimagesize( $file );
+
+ if ( $width == HEADER_IMAGE_WIDTH && $height == HEADER_IMAGE_HEIGHT ) {
+ // Add the meta-data
+ wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
+
+ set_theme_mod('header_image', esc_url($url));
+ do_action('wp_create_file_in_uploads', $file, $id); // For replication
+ return $this->finished();
+ } elseif ( $width > HEADER_IMAGE_WIDTH ) {
+ $oitar = $width / HEADER_IMAGE_WIDTH;
+ $image = wp_crop_image($file, 0, 0, $width, $height, HEADER_IMAGE_WIDTH, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file));
+ $image = apply_filters('wp_create_file_in_uploads', $image, $id); // For replication
+
+ $url = str_replace(basename($url), basename($image), $url);
+ $width = $width / $oitar;
+ $height = $height / $oitar;
+ } else {
+ $oitar = 1;
+ }
+ ?>
+
+
+ 1 ) {
+ $_POST['x1'] = $_POST['x1'] * $_POST['oitar'];
+ $_POST['y1'] = $_POST['y1'] * $_POST['oitar'];
+ $_POST['width'] = $_POST['width'] * $_POST['oitar'];
+ $_POST['height'] = $_POST['height'] * $_POST['oitar'];
+ }
+
+ $original = get_attached_file( $_POST['attachment_id'] );
+
+ $cropped = wp_crop_image($_POST['attachment_id'], $_POST['x1'], $_POST['y1'], $_POST['width'], $_POST['height'], HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT);
+ $cropped = apply_filters('wp_create_file_in_uploads', $cropped, $_POST['attachment_id']); // For replication
+
+ $parent = get_post($_POST['attachment_id']);
+ $parent_url = $parent->guid;
+ $url = str_replace(basename($parent_url), basename($cropped), $parent_url);
+
+ // Construct the object array
+ $object = array(
+ 'ID' => $_POST['attachment_id'],
+ 'post_title' => basename($cropped),
+ 'post_content' => $url,
+ 'post_mime_type' => 'image/jpeg',
+ 'guid' => $url
+ );
+
+ // Update the attachment
+ wp_insert_attachment($object, $cropped);
+ wp_update_attachment_metadata( $_POST['attachment_id'], wp_generate_attachment_metadata( $_POST['attachment_id'], $cropped ) );
+
+ set_theme_mod('header_image', $url);
+
+ // cleanup
+ $medium = str_replace(basename($original), 'midsize-'.basename($original), $original);
+ @unlink( apply_filters( 'wp_delete_file', $medium ) );
+ @unlink( apply_filters( 'wp_delete_file', $original ) );
+
+ return $this->finished();
+ }
+
+ /**
+ * Display last step of custom header image page.
+ *
+ * @since unknown
+ */
+ function finished() {
+ ?>
+
+ step();
+ if ( 1 == $step )
+ $this->step_1();
+ elseif ( 2 == $step )
+ $this->step_2();
+ elseif ( 3 == $step )
+ $this->step_3();
+ }
+
+}
+?>