diff --git a/wp-admin/custom-header.php b/wp-admin/custom-header.php
new file mode 100644
index 0000000000..8bdd83d073
--- /dev/null
+++ b/wp-admin/custom-header.php
@@ -0,0 +1,324 @@
+admin_header_callback = $admin_header_callback;
+ }
+
+ function init() {
+ $page = add_theme_page(__('Custom Image Header'), __('Custom Image Header'), 'edit_themes', 'custom-header', array(&$this, 'admin_page'));
+
+ add_action("admin_print_scripts-$page", array(&$this, 'js_includes'));
+ add_action("admin_head-$page", array(&$this, 'js'), 50);
+ add_action("admin_head-$page", $this->admin_header_callback, 51);
+ }
+
+ function js_includes() {
+ wp_enqueue_script('cropper');
+ wp_enqueue_script('colorpicker');
+ }
+
+ function js() {
+
+ if ( isset( $_POST['textcolor'] ) ) {
+ 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']) )
+ remove_theme_mods();
+ ?>
+
+
+
+
+
+
+
+
+
%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'];
+ $file = $file['file'];
+ $filename = basename($file);
+
+ // Construct the object array
+ $object = array(
+ 'post_title' => $filename,
+ 'post_content' => $url,
+ 'post_mime_type' => 'import',
+ 'guid' => $url);
+
+ // Save the data
+ $id = wp_insert_attachment($object, $file);
+
+ $upload = array('file' => $file, 'id' => $id);
+
+ list($width, $height, $type, $attr) = getimagesize( $file );
+
+ if ( $width == HEADER_IMAGE_WIDTH && $height == HEADER_IMAGE_HEIGHT ) {
+ set_theme_mod('header_image', $url);
+ $header = apply_filters('wp_create_file_in_uploads', $header); // 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); // 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'];
+ }
+
+ $header = wp_crop_image($_POST['attachment_id'], $_POST['x1'], $_POST['y1'], $_POST['width'], $_POST['height'], HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT);
+ $header = apply_filters('wp_create_file_in_uploads', $header); // For replication
+
+ $parent = get_post($_POST['attachment_id']);
+
+ $parent_url = $parent->guid;
+
+ $url = str_replace(basename($parent_url), basename($header), $parent_url);
+
+ set_theme_mod('header_image', $url);
+
+ // cleanup
+ $file = get_attached_file( $_POST['attachment_id'] );
+ $medium = str_replace(basename($file), 'midsize-'.basename($file), $file);
+ @unlink( $medium );
+ apply_filters( 'wp_delete_file', $medium );
+ wp_delete_attachment( $_POST['attachment_id'] );
+
+ return $this->finished();
+ }
+
+ function finished() {
+ ?>
+
+ step_1();
+ } elseif ( 2 == $step ) {
+ $this->step_2();
+ } elseif ( 3 == $step ) {
+ $this->step_3();
+ }
+
+ }
+
+}
+?>
diff --git a/wp-includes/theme.php b/wp-includes/theme.php
index 494f9cdfca..25c21dc23d 100644
--- a/wp-includes/theme.php
+++ b/wp-includes/theme.php
@@ -455,10 +455,54 @@ function set_theme_mod($name, $value) {
wp_cache_delete("mods_$theme", 'options');
}
+function remove_theme_mod( $name ) {
+ $theme = get_current_theme();
+
+ $mods = get_option("mods_$theme");
+
+ if ( !isset($mods[$name]) )
+ return;
+
+ unset($mods[$name]);
+
+ if ( empty($mods) )
+ return remove_theme_mods();
+
+ update_option("mods_$theme", $mods);
+ wp_cache_delete("mods_$theme", 'options');
+}
+
function remove_theme_mods() {
$theme = get_current_theme();
delete_option("mods_$theme");
}
+function get_header_textcolor() {
+ return get_theme_mod('header_textcolor', HEADER_TEXTCOLOR);
+}
+
+function header_textcolor() {
+ echo get_header_textcolor();
+}
+
+function get_header_image() {
+ return get_theme_mod('header_image', HEADER_IMAGE);
+}
+
+function header_image() {
+ echo get_header_image();
+}
+
+function add_custom_image_header($header_callback, $admin_header_callback) {
+ if ( ! empty($header_callback) )
+ add_action('wp_head', $header_callback);
+
+ if ( ! is_admin() )
+ return;
+ require_once(ABSPATH . 'wp-admin/custom-header.php');
+ $GLOBALS['custom_image_header'] =& new Custom_Image_Header($admin_header_callback);
+ add_action('admin_menu', array(&$GLOBALS['custom_image_header'], 'init'));
+}
+
?>
\ No newline at end of file