2007-05-01 19:46:55 +02:00
< ? php
2008-08-16 09:27:34 +02:00
/**
* The custom header image script .
*
* @ package WordPress
* @ subpackage Administration
*/
/**
* The custom header image class .
*
2010-03-30 20:55:35 +02:00
* @ since 2.1 . 0
2008-08-16 09:27:34 +02:00
* @ package WordPress
* @ subpackage Administration
*/
2007-05-01 19:46:55 +02:00
class Custom_Image_Header {
2008-08-16 09:27:34 +02:00
/**
* Callback for administration header .
*
* @ var callback
2010-03-30 20:55:35 +02:00
* @ since 2.1 . 0
2008-08-16 09:27:34 +02:00
* @ access private
*/
2007-05-01 19:46:55 +02:00
var $admin_header_callback ;
2010-01-28 20:00:16 +01:00
/**
* Callback for header div .
*
* @ var callback
2010-03-26 20:13:36 +01:00
* @ since 3.0 . 0
2010-01-28 20:00:16 +01:00
* @ access private
*/
var $admin_image_div_callback ;
2010-03-30 20:55:35 +02:00
/**
* Holds default headers .
*
* @ var array
* @ since 3.0 . 0
* @ access private
*/
2010-02-25 20:18:44 +01:00
var $default_headers = array ();
2008-08-16 09:27:34 +02:00
/**
* PHP4 Constructor - Register administration header callback .
*
2010-03-30 20:55:35 +02:00
* @ since 2.1 . 0
2008-08-16 09:27:34 +02:00
* @ param callback $admin_header_callback
2010-01-28 20:00:16 +01:00
* @ param callback $admin_image_div_callback Optional custom image div output callback .
2008-08-16 09:27:34 +02:00
* @ return Custom_Image_Header
*/
2010-01-28 20:00:16 +01:00
function Custom_Image_Header ( $admin_header_callback , $admin_image_div_callback = '' ) {
2007-05-01 19:46:55 +02:00
$this -> admin_header_callback = $admin_header_callback ;
2010-01-28 20:00:16 +01:00
$this -> admin_image_div_callback = $admin_image_div_callback ;
2007-05-01 19:46:55 +02:00
}
2008-08-16 09:27:34 +02:00
/**
2010-03-17 05:39:50 +01:00
* Set up the hooks for the Custom Header admin page .
2008-08-16 09:27:34 +02:00
*
2010-03-30 20:55:35 +02:00
* @ since 2.1 . 0
2008-08-16 09:27:34 +02:00
*/
2007-05-01 19:46:55 +02:00
function init () {
2010-05-12 21:19:57 +02:00
if ( ! current_user_can ( 'edit_theme_options' ) )
2010-02-10 17:49:16 +01:00
return ;
2010-05-12 21:19:57 +02:00
$page = add_theme_page ( __ ( 'Header' ), __ ( 'Header' ), 'edit_theme_options' , 'custom-header' , array ( & $this , 'admin_page' ));
2007-05-01 19:46:55 +02:00
add_action ( " admin_print_scripts- $page " , array ( & $this , 'js_includes' ));
2008-08-28 19:42:21 +02:00
add_action ( " admin_print_styles- $page " , array ( & $this , 'css_includes' ));
2008-04-16 22:58:03 +02:00
add_action ( " admin_head- $page " , array ( & $this , 'take_action' ), 50 );
2007-05-01 19:46:55 +02:00
add_action ( " admin_head- $page " , array ( & $this , 'js' ), 50 );
add_action ( " admin_head- $page " , $this -> admin_header_callback , 51 );
}
2008-08-16 09:27:34 +02:00
/**
* Get the current step .
*
2010-03-30 20:55:35 +02:00
* @ since 2.6 . 0
2008-08-16 09:27:34 +02:00
*
* @ return int Current step
*/
2008-04-16 22:58:03 +02:00
function step () {
2008-08-16 09:27:34 +02:00
if ( ! isset ( $_GET [ 'step' ] ) )
return 1 ;
$step = ( int ) $_GET [ 'step' ];
2008-04-16 22:58:03 +02:00
if ( $step < 1 || 3 < $step )
$step = 1 ;
2008-08-16 09:27:34 +02:00
2008-04-16 22:58:03 +02:00
return $step ;
2007-05-01 19:46:55 +02:00
}
2008-08-16 09:27:34 +02:00
/**
2010-03-17 05:39:50 +01:00
* Set up the enqueue for the JavaScript files .
2008-08-16 09:27:34 +02:00
*
2010-03-30 20:55:35 +02:00
* @ since 2.1 . 0
2008-08-16 09:27:34 +02:00
*/
2008-04-16 22:58:03 +02:00
function js_includes () {
$step = $this -> step ();
2008-08-16 09:27:34 +02:00
2008-04-16 22:58:03 +02:00
if ( 1 == $step )
2008-08-28 19:42:21 +02:00
wp_enqueue_script ( 'farbtastic' );
2008-08-09 07:36:14 +02:00
elseif ( 2 == $step )
2009-03-27 17:45:55 +01:00
wp_enqueue_script ( 'jcrop' );
2008-04-16 22:58:03 +02:00
}
2007-05-01 19:46:55 +02:00
2008-08-28 19:42:21 +02:00
/**
2010-03-17 05:39:50 +01:00
* Set up the enqueue for the CSS files
2008-08-28 19:42:21 +02:00
*
* @ since 2.7
*/
function css_includes () {
$step = $this -> step ();
2009-03-27 17:45:55 +01:00
if ( 1 == $step )
2008-08-28 19:42:21 +02:00
wp_enqueue_style ( 'farbtastic' );
2009-03-27 17:45:55 +01:00
elseif ( 2 == $step )
wp_enqueue_style ( 'jcrop' );
2008-08-28 19:42:21 +02:00
}
2008-08-16 09:27:34 +02:00
/**
* Execute custom header modification .
*
2010-03-30 20:55:35 +02:00
* @ since 2.6 . 0
2008-08-16 09:27:34 +02:00
*/
2008-04-16 22:58:03 +02:00
function take_action () {
2010-05-12 21:19:57 +02:00
if ( ! current_user_can ( 'edit_theme_options' ) )
2010-02-10 17:49:16 +01:00
return ;
2007-05-01 19:46:55 +02:00
if ( isset ( $_POST [ 'textcolor' ] ) ) {
2007-05-04 19:52:22 +02:00
check_admin_referer ( 'custom-header' );
2007-05-01 19:46:55 +02:00
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 );
}
}
2010-02-25 20:32:10 +01:00
2007-05-04 19:52:22 +02:00
if ( isset ( $_POST [ 'resetheader' ]) ) {
check_admin_referer ( 'custom-header' );
2007-05-01 19:46:55 +02:00
remove_theme_mods ();
2007-05-04 19:52:22 +02:00
}
2010-02-25 20:18:44 +01:00
if ( isset ( $_POST [ 'default-header' ]) ) {
2010-02-25 20:32:10 +01:00
check_admin_referer ( 'custom-header' );
2010-02-25 20:18:44 +01:00
$this -> process_default_headers ();
if ( isset ( $this -> default_headers [ $_POST [ 'default-header' ]]) )
set_theme_mod ( 'header_image' , esc_url ( $this -> default_headers [ $_POST [ 'default-header' ]][ 'url' ]));
}
}
/**
* Process the default headers
*
2010-03-30 20:55:35 +02:00
* @ since 3.0 . 0
2010-02-25 20:18:44 +01:00
*/
function process_default_headers () {
global $_wp_default_headers ;
if ( ! empty ( $this -> headers ) )
return ;
if ( ! isset ( $_wp_default_headers ) )
return ;
$this -> default_headers = $_wp_default_headers ;
foreach ( array_keys ( $this -> default_headers ) as $header ) {
$this -> default_headers [ $header ][ 'url' ] = sprintf ( $this -> default_headers [ $header ][ 'url' ], get_template_directory_uri (), get_stylesheet_directory_uri () );
$this -> default_headers [ $header ][ 'thumbnail_url' ] = sprintf ( $this -> default_headers [ $header ][ 'thumbnail_url' ], get_template_directory_uri (), get_stylesheet_directory_uri () );
}
}
/**
* Display UI for selecting one of several default headers .
*
* @ since 3.0 . 0
*/
function show_default_header_selector () {
echo '<table id="available-headers" cellspacing="0" cellpadding="0">' ;
$headers = array_keys ( $this -> default_headers );
$table = array ();
$rows = ceil ( count ( $headers ) / 3 );
for ( $row = 1 ; $row <= $rows ; $row ++ ) {
for ( $col = 1 ; $col <= 3 ; $col ++ ) {
$table [ $row ][ $col ] = array_shift ( $headers );
}
}
foreach ( $table as $row => $cols ) {
echo '<tr>' ;
foreach ( $cols as $col => $header_key ) {
if ( ! $header_key )
continue ;
2010-02-28 22:02:24 +01:00
$class = array ( 'available-header' );
2010-02-25 20:18:44 +01:00
if ( $row == 1 ) $class [] = 'top' ;
if ( $col == 1 ) $class [] = 'left' ;
if ( $row == $rows ) $class [] = 'bottom' ;
if ( $col == 3 ) $class [] = 'right' ;
if ( ! isset ( $this -> headers [ $header_key ]))
echo '<td class="' . join ( ' ' , $class ) . '">' ;
$header_thumbnail = $this -> default_headers [ $header_key ][ 'thumbnail_url' ];
$header_url = $this -> default_headers [ $header_key ][ 'url' ];
$header_desc = $this -> default_headers [ $header_key ][ 'description' ];
echo '<label><input name="default-header" type="radio" value="' . esc_attr ( $header_key ) . '" ' . checked ( $header_url , get_header_image (), false ) . ' />' ;
echo '<img src="' . $header_thumbnail . '" alt="' . esc_attr ( $header_desc ) . '" /></label>' ;
echo '</td>' ;
}
echo '</tr>' ;
}
echo '</table>' ;
2007-05-01 19:46:55 +02:00
}
2008-08-16 09:27:34 +02:00
/**
* Execute Javascript depending on step .
*
2010-03-30 20:55:35 +02:00
* @ since 2.1 . 0
2008-08-16 09:27:34 +02:00
*/
2008-04-16 22:58:03 +02:00
function js () {
$step = $this -> step ();
if ( 1 == $step )
$this -> js_1 ();
elseif ( 2 == $step )
$this -> js_2 ();
}
2007-05-01 19:46:55 +02:00
2008-08-16 09:27:34 +02:00
/**
* Display Javascript based on Step 1.
*
2010-03-30 20:55:35 +02:00
* @ since 2.6 . 0
2008-08-16 09:27:34 +02:00
*/
2008-04-16 22:58:03 +02:00
function js_1 () { ?>
< script type = " text/javascript " >
2008-08-28 19:42:21 +02:00
var buttons = [ '#name' , '#desc' , '#pickcolor' , '#defaultcolor' ];
var farbtastic ;
2007-05-01 19:46:55 +02:00
function pickColor ( color ) {
2008-08-28 19:42:21 +02:00
jQuery ( '#name' ) . css ( 'color' , color );
jQuery ( '#desc' ) . css ( 'color' , color );
jQuery ( '#textcolor' ) . val ( color );
farbtastic . setColor ( color );
2007-05-01 19:46:55 +02:00
}
2008-12-09 19:03:31 +01:00
2008-08-28 19:42:21 +02:00
jQuery ( document ) . ready ( function () {
jQuery ( '#pickcolor' ) . click ( function () {
jQuery ( '#colorPickerDiv' ) . show ();
});
2008-12-09 19:03:31 +01:00
2008-08-28 19:42:21 +02:00
jQuery ( '#hidetext' ) . click ( function () {
toggle_text ();
});
2008-12-09 19:03:31 +01:00
2008-08-28 19:42:21 +02:00
farbtastic = jQuery . farbtastic ( '#colorPickerDiv' , function ( color ) { pickColor ( color ); });
pickColor ( '#<?php echo get_theme_mod(' header_textcolor ', HEADER_TEXTCOLOR); ?>' );
2008-12-09 19:03:31 +01:00
2008-08-28 19:42:21 +02:00
< ? php if ( 'blank' == get_theme_mod ( 'header_textcolor' , HEADER_TEXTCOLOR ) ) { ?>
toggle_text ();
< ? php } ?>
});
2008-12-09 19:03:31 +01:00
2008-08-28 19:42:21 +02:00
jQuery ( document ) . mousedown ( function (){
// Make the picker disappear, since we're using it in an independant div
hide_picker ();
});
2007-05-01 19:46:55 +02:00
function colorDefault () {
2008-04-16 22:58:03 +02:00
pickColor ( '#<?php echo HEADER_TEXTCOLOR; ?>' );
2007-05-01 19:46:55 +02:00
}
2008-08-28 19:42:21 +02:00
function hide_picker ( what ) {
var update = false ;
jQuery ( '#colorPickerDiv' ) . each ( function (){
var id = jQuery ( this ) . attr ( 'id' );
if ( id == what ) {
return ;
}
var display = jQuery ( this ) . css ( 'display' );
if ( display == 'block' ) {
jQuery ( this ) . fadeOut ( 2 );
}
});
2007-05-01 19:46:55 +02:00
}
2008-08-28 19:42:21 +02:00
function toggle_text ( force ) {
2010-01-18 21:34:48 +01:00
if ( jQuery ( '#textcolor' ) . val () == 'blank' ) {
2008-08-28 19:42:21 +02:00
//Show text
jQuery ( buttons . toString () ) . show ();
jQuery ( '#textcolor' ) . val ( '<?php echo HEADER_TEXTCOLOR; ?>' );
jQuery ( '#hidetext' ) . val ( '<?php _e(' Hide Text '); ?>' );
}
else {
//Hide text
jQuery ( buttons . toString () ) . hide ();
jQuery ( '#textcolor' ) . val ( 'blank' );
jQuery ( '#hidetext' ) . val ( '<?php _e(' Show Text '); ?>' );
}
2007-05-01 19:46:55 +02:00
}
2008-08-28 19:42:21 +02:00
2007-05-01 19:46:55 +02:00
</ script >
< ? php
}
2008-08-16 09:27:34 +02:00
/**
* Display Javascript based on Step 2.
*
2010-03-30 20:55:35 +02:00
* @ since 2.6 . 0
2008-08-16 09:27:34 +02:00
*/
2008-04-16 22:58:03 +02:00
function js_2 () { ?>
< script type = " text/javascript " >
2009-03-27 17:45:55 +01:00
function onEndCrop ( coords ) {
jQuery ( '#x1' ) . val ( coords . x );
jQuery ( '#y1' ) . val ( coords . y );
2008-08-28 19:42:21 +02:00
jQuery ( '#x2' ) . val ( coords . x2 );
jQuery ( '#y2' ) . val ( coords . y2 );
2009-03-27 17:45:55 +01:00
jQuery ( '#width' ) . val ( coords . w );
jQuery ( '#height' ) . val ( coords . h );
2008-04-16 22:58:03 +02:00
}
// with a supplied ratio
2008-08-28 19:42:21 +02:00
jQuery ( document ) . ready ( function () {
var xinit = < ? php echo HEADER_IMAGE_WIDTH ; ?> ;
var yinit = < ? php echo HEADER_IMAGE_HEIGHT ; ?> ;
var ratio = xinit / yinit ;
var ximg = jQuery ( '#upload' ) . width ();
var yimg = jQuery ( '#upload' ) . height ();
2009-04-20 20:18:39 +02:00
2009-04-13 19:00:51 +02:00
//set up default values
jQuery ( '#x1' ) . val ( 0 );
jQuery ( '#y1' ) . val ( 0 );
jQuery ( '#x2' ) . val ( xinit );
jQuery ( '#y2' ) . val ( yinit );
jQuery ( '#width' ) . val ( xinit );
jQuery ( '#height' ) . val ( yinit );
2009-04-20 20:18:39 +02:00
2008-08-28 19:42:21 +02:00
if ( yimg < yinit || ximg < xinit ) {
if ( ximg / yimg > ratio ) {
yinit = yimg ;
xinit = yinit * ratio ;
} else {
xinit = ximg ;
yinit = xinit / ratio ;
2008-04-16 22:58:03 +02:00
}
}
2009-03-27 17:45:55 +01:00
2009-04-03 20:18:47 +02:00
jQuery ( '#upload' ) . Jcrop ({
2009-03-27 17:45:55 +01:00
aspectRatio : ratio ,
setSelect : [ 0 , 0 , xinit , yinit ],
onSelect : onEndCrop
});
2008-08-28 19:42:21 +02:00
});
2008-04-16 22:58:03 +02:00
</ script >
< ? php
}
2008-08-16 09:27:34 +02:00
/**
* Display first step of custom header image page .
*
2010-03-30 20:55:35 +02:00
* @ since 2.1 . 0
2008-08-16 09:27:34 +02:00
*/
2007-05-01 19:46:55 +02:00
function step_1 () {
2010-02-25 20:18:44 +01:00
$this -> process_default_headers ();
2010-03-18 20:06:57 +01:00
?>
2007-05-01 19:46:55 +02:00
< div class = " wrap " >
2008-11-27 20:24:46 +01:00
< ? php screen_icon (); ?>
2007-05-01 19:46:55 +02:00
< h2 >< ? php _e ( 'Your Header Image' ); ?> </h2>
2010-03-18 20:06:57 +01:00
2010-02-25 20:18:44 +01:00
< ? php
2010-03-18 20:06:57 +01:00
if ( isset ( $_GET [ 'updated' ]) && $_GET [ 'updated' ] ) { ?>
< div id = " message " class = " updated " >
2010-05-04 19:13:11 +02:00
< p >< ? php printf ( __ ( 'Header updated. <a href="%s">Visit your site</a> to see how it looks.' ), home_url ( '/' ) ); ?> </p>
2010-03-18 20:06:57 +01:00
</ div >
< ? php }
2010-02-25 20:18:44 +01:00
if ( get_theme_mod ( 'header_image' ) || empty ( $this -> default_headers ) ) :
?>
2007-05-01 19:46:55 +02:00
< p >< ? php _e ( 'This is your header image. You can change the text color or upload and crop a new image.' ); ?> </p>
2010-01-28 20:00:16 +01:00
< ? php
2007-05-01 19:46:55 +02:00
2010-01-28 20:00:16 +01:00
if ( $this -> admin_image_div_callback ) {
call_user_func ( $this -> admin_image_div_callback );
} else {
?>
2009-05-18 18:00:33 +02:00
< div id = " headimg " style = " background-image: url(<?php esc_url(header_image()) ?>); " >
2007-05-01 19:46:55 +02:00
< h1 >< a onclick = " return false; " href = " <?php bloginfo('url'); ?> " title = " <?php bloginfo('name'); ?> " id = " name " >< ? php bloginfo ( 'name' ); ?> </a></h1>
< div id = " desc " >< ? php bloginfo ( 'description' ); ?> </div>
</ div >
2010-01-28 20:00:16 +01:00
< ? php } ?>
2007-05-01 19:46:55 +02:00
< ? php if ( ! defined ( 'NO_HEADER_TEXT' ) ) { ?>
2008-05-27 19:46:01 +02:00
< form method = " post " action = " <?php echo admin_url('themes.php?page=custom-header&updated=true') ?> " >
2009-05-05 21:43:53 +02:00
< input type = " button " class = " button " value = " <?php esc_attr_e('Hide Text'); ?> " onclick = " hide_text() " id = " hidetext " />
< input type = " button " class = " button " value = " <?php esc_attr_e('Select a Text Color'); ?> " id = " pickcolor " />< input type = " button " class = " button " value = " <?php esc_attr_e('Use Original Color'); ?> " onclick = " colorDefault() " id = " defaultcolor " />
2010-02-25 20:18:44 +01:00
< ? php wp_nonce_field ( 'custom-header' ); ?>
2009-05-05 21:43:53 +02:00
< input type = " hidden " name = " textcolor " id = " textcolor " value = " #<?php esc_attr(header_textcolor()) ?> " />< input name = " submit " type = " submit " class = " button " value = " <?php esc_attr_e('Save Changes'); ?> " /></ form >
2007-05-01 19:46:55 +02:00
< ? php } ?>
2008-08-28 19:42:21 +02:00
< div id = " colorPickerDiv " style = " z-index: 100;background:#eee;border:1px solid #ccc;position:absolute;display:none; " > </ div >
2007-05-01 19:46:55 +02:00
</ div >
2010-02-25 20:18:44 +01:00
< ? php
else :
echo '<p>' . __ ( 'Choose one of these cool headers, or upload your own image below.' ) . '</p>' ;
echo '<form method="post" action="' . admin_url ( 'themes.php?page=custom-header&updated=true' ) . '">' ;
wp_nonce_field ( 'custom-header' );
$this -> show_default_header_selector ();
2010-02-25 20:32:10 +01:00
echo '<input type="submit" class="button" value="' . esc_attr__ ( 'Save Changes' ) . '" />' ;
2010-02-25 20:18:44 +01:00
echo '</form>' ;
echo '</div>' ;
endif ;
?>
2007-05-01 19:46:55 +02:00
< div class = " wrap " >
2010-04-30 05:17:49 +02:00
< h3 >< ? php _e ( 'Upload New Header Image' ); ?> </h3><p><?php _e('Here you can upload a custom header image to be shown at the top of your site instead of the default one. On the next screen you will be able to crop the image.'); ?> <?php printf(__('Images of exactly <strong>%1$d x %2$d pixels</strong> will be used as-is.'), HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT); ?></p>
2007-05-01 19:46:55 +02:00
2010-03-08 23:14:11 +01:00
< form enctype = " multipart/form-data " id = " uploadForm " method = " POST " action = " <?php echo esc_attr(add_query_arg('step', 2)) ?> " >
2007-05-01 19:46:55 +02:00
< label for = " upload " >< ? php _e ( 'Choose an image from your computer:' ); ?> </label><br /><input type="file" id="upload" name="import" />
< input type = " hidden " name = " action " value = " save " />
2007-05-04 19:52:22 +02:00
< ? php wp_nonce_field ( 'custom-header' ) ?>
2007-05-01 19:46:55 +02:00
< p class = " submit " >
2009-05-05 21:43:53 +02:00
< input type = " submit " value = " <?php esc_attr_e('Upload'); ?> " />
2007-05-01 19:46:55 +02:00
</ p >
</ form >
</ div >
< ? php if ( get_theme_mod ( 'header_image' ) || get_theme_mod ( 'header_textcolor' ) ) : ?>
< div class = " wrap " >
2010-03-18 20:06:57 +01:00
< h3 >< ? php _e ( 'Reset Header Image and Color' ); ?> </h3>
2009-05-05 21:43:53 +02:00
< form method = " post " action = " <?php echo esc_attr(add_query_arg('step', 1)) ?> " >
2010-02-25 20:32:10 +01:00
< ? php
wp_nonce_field ( 'custom-header' );
if ( ! empty ( $this -> default_headers ) ) {
?>
< p >< ? php _e ( 'Use one of these cool headers.' ) ?> </p>
< ? php
$this -> show_default_header_selector ();
?>
< input type = " submit " class = " button " name = " resetheader " value = " <?php esc_attr_e('Save Changes'); ?> " />
< ? php
} else {
?>
< p >< ? php _e ( 'This will restore the original header image and color. You will not be able to retrieve any customizations.' ) ?> </p>
2009-05-05 21:43:53 +02:00
< input type = " submit " class = " button " name = " resetheader " value = " <?php esc_attr_e('Restore Original Header'); ?> " />
2010-02-25 20:32:10 +01:00
< ? php } ?>
2007-05-01 19:46:55 +02:00
</ form >
</ div >
< ? php endif ;
}
2008-08-16 09:27:34 +02:00
/**
* Display second step of custom header image page .
*
2010-03-30 20:55:35 +02:00
* @ since 2.1 . 0
2008-08-16 09:27:34 +02:00
*/
2007-05-01 19:46:55 +02:00
function step_2 () {
2007-05-04 19:52:22 +02:00
check_admin_referer ( 'custom-header' );
2007-05-01 19:46:55 +02:00
$overrides = array ( 'test_form' => false );
$file = wp_handle_upload ( $_FILES [ 'import' ], $overrides );
if ( isset ( $file [ 'error' ]) )
die ( $file [ 'error' ] );
$url = $file [ 'url' ];
2008-02-26 22:07:15 +01:00
$type = $file [ 'type' ];
2007-05-01 19:46:55 +02:00
$file = $file [ 'file' ];
$filename = basename ( $file );
// Construct the object array
$object = array (
'post_title' => $filename ,
'post_content' => $url ,
2008-02-26 22:07:15 +01:00
'post_mime_type' => $type ,
2007-05-01 19:46:55 +02:00
'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 ) {
2008-02-26 22:07:15 +01:00
// Add the meta-data
wp_update_attachment_metadata ( $id , wp_generate_attachment_metadata ( $id , $file ) );
2009-05-18 18:00:33 +02:00
set_theme_mod ( 'header_image' , esc_url ( $url ));
2008-01-04 20:36:34 +01:00
do_action ( 'wp_create_file_in_uploads' , $file , $id ); // For replication
2007-05-01 19:46:55 +02:00
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 ));
2009-12-23 19:39:31 +01:00
if ( is_wp_error ( $image ) )
wp_die ( __ ( 'Image could not be processed. Please go back and try again.' ), __ ( 'Image Processing Error' ) );
2007-05-01 19:46:55 +02:00
$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 ;
}
?>
< div class = " wrap " >
2009-05-05 21:43:53 +02:00
< form method = " POST " action = " <?php echo esc_attr(add_query_arg('step', 3)) ?> " >
2007-05-01 19:46:55 +02:00
< p >< ? php _e ( 'Choose the part of the image you want to use as your header.' ); ?> </p>
2008-04-16 22:58:03 +02:00
< div id = " testWrap " style = " position: relative " >
2007-05-01 19:46:55 +02:00
< img src = " <?php echo $url ; ?> " id = " upload " width = " <?php echo $width ; ?> " height = " <?php echo $height ; ?> " />
</ div >
< p class = " submit " >
< input type = " hidden " name = " x1 " id = " x1 " />
< input type = " hidden " name = " y1 " id = " y1 " />
< input type = " hidden " name = " x2 " id = " x2 " />
< input type = " hidden " name = " y2 " id = " y2 " />
< input type = " hidden " name = " width " id = " width " />
< input type = " hidden " name = " height " id = " height " />
2009-05-05 21:43:53 +02:00
< input type = " hidden " name = " attachment_id " id = " attachment_id " value = " <?php echo esc_attr( $id ); ?> " />
< input type = " hidden " name = " oitar " id = " oitar " value = " <?php echo esc_attr( $oitar ); ?> " />
2007-05-04 19:52:22 +02:00
< ? php wp_nonce_field ( 'custom-header' ) ?>
2009-05-05 21:43:53 +02:00
< input type = " submit " value = " <?php esc_attr_e('Crop Header'); ?> " />
2007-05-01 19:46:55 +02:00
</ p >
</ form >
</ div >
< ? php
}
2008-08-16 09:27:34 +02:00
/**
* Display third step of custom header image page .
*
2010-03-30 20:55:35 +02:00
* @ since 2.1 . 0
2008-08-16 09:27:34 +02:00
*/
2007-05-01 19:46:55 +02:00
function step_3 () {
2007-05-04 19:52:22 +02:00
check_admin_referer ( 'custom-header' );
2007-05-01 19:46:55 +02:00
if ( $_POST [ 'oitar' ] > 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' ];
}
2008-02-26 22:07:15 +01:00
$original = get_attached_file ( $_POST [ 'attachment_id' ] );
2007-05-01 19:46:55 +02:00
2008-02-26 22:07:15 +01:00
$cropped = wp_crop_image ( $_POST [ 'attachment_id' ], $_POST [ 'x1' ], $_POST [ 'y1' ], $_POST [ 'width' ], $_POST [ 'height' ], HEADER_IMAGE_WIDTH , HEADER_IMAGE_HEIGHT );
2009-12-23 19:39:31 +01:00
if ( is_wp_error ( $cropped ) )
wp_die ( __ ( 'Image could not be processed. Please go back and try again.' ), __ ( 'Image Processing Error' ) );
2008-02-26 22:07:15 +01:00
$cropped = apply_filters ( 'wp_create_file_in_uploads' , $cropped , $_POST [ 'attachment_id' ]); // For replication
2007-05-01 19:46:55 +02:00
2008-02-26 22:07:15 +01:00
$parent = get_post ( $_POST [ 'attachment_id' ]);
2007-05-01 19:46:55 +02:00
$parent_url = $parent -> guid ;
2008-02-26 22:07:15 +01:00
$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
);
2007-05-01 19:46:55 +02:00
2008-02-26 22:07:15 +01:00
// Update the attachment
wp_insert_attachment ( $object , $cropped );
wp_update_attachment_metadata ( $_POST [ 'attachment_id' ], wp_generate_attachment_metadata ( $_POST [ 'attachment_id' ], $cropped ) );
2007-05-01 19:46:55 +02:00
set_theme_mod ( 'header_image' , $url );
// cleanup
2008-02-26 22:07:15 +01:00
$medium = str_replace ( basename ( $original ), 'midsize-' . basename ( $original ), $original );
2007-05-01 19:46:55 +02:00
@ unlink ( apply_filters ( 'wp_delete_file' , $medium ) );
2008-02-26 22:07:15 +01:00
@ unlink ( apply_filters ( 'wp_delete_file' , $original ) );
2007-05-01 19:46:55 +02:00
return $this -> finished ();
}
2008-08-16 09:27:34 +02:00
/**
* Display last step of custom header image page .
*
2010-03-30 20:55:35 +02:00
* @ since 2.1 . 0
2008-08-16 09:27:34 +02:00
*/
2007-05-01 19:46:55 +02:00
function finished () {
2010-01-28 20:00:16 +01:00
$_GET [ 'updated' ] = 1 ;
$this -> step_1 ();
2007-05-01 19:46:55 +02:00
}
2008-08-16 09:27:34 +02:00
/**
* Display the page based on the current step .
*
2010-03-30 20:55:35 +02:00
* @ since 2.1 . 0
2008-08-16 09:27:34 +02:00
*/
2007-05-01 19:46:55 +02:00
function admin_page () {
2010-05-12 21:19:57 +02:00
if ( ! current_user_can ( 'edit_theme_options' ) )
2010-02-10 17:49:16 +01:00
wp_die ( __ ( 'You do not have permission to customize headers.' ));
2008-04-16 22:58:03 +02:00
$step = $this -> step ();
if ( 1 == $step )
2007-05-01 19:46:55 +02:00
$this -> step_1 ();
2008-04-16 22:58:03 +02:00
elseif ( 2 == $step )
2007-05-01 19:46:55 +02:00
$this -> step_2 ();
2008-04-16 22:58:03 +02:00
elseif ( 3 == $step )
2007-05-01 19:46:55 +02:00
$this -> step_3 ();
}
}
2008-11-27 20:24:46 +01:00
?>