From 26fff7a52e3cf0132ae9864497c15576623ce9cd Mon Sep 17 00:00:00 2001 From: ryan Date: Wed, 3 Jan 2007 23:49:34 +0000 Subject: [PATCH] Custom Image Header. fixes #3465 git-svn-id: http://svn.automattic.com/wordpress/trunk@4673 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/custom-header.php | 324 +++++++++++++++++++++++++++++++++++++ wp-includes/theme.php | 44 +++++ 2 files changed, 368 insertions(+) create mode 100644 wp-admin/custom-header.php 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