PHP Cross Reference of WordPress Subversion HEAD |
| [ Index ] [ Classes ] [ Functions ] [ Variables ] [ Constants ] |
[Summary view] [Print] [Text view]
1 <?php 2 3 class Custom_Image_Header { 4 var $admin_header_callback; 5 6 function Custom_Image_Header($admin_header_callback) { 7 $this->admin_header_callback = $admin_header_callback; 8 } 9 10 function init() { 11 $page = add_theme_page(__('Custom Image Header'), __('Custom Image Header'), 'edit_themes', 'custom-header', array(&$this, 'admin_page')); 12 13 add_action("admin_print_scripts-$page", array(&$this, 'js_includes')); 14 add_action("admin_head-$page", array(&$this, 'js'), 50); 15 add_action("admin_head-$page", $this->admin_header_callback, 51); 16 } 17 18 function js_includes() { 19 wp_enqueue_script('cropper'); 20 wp_enqueue_script('colorpicker'); 21 } 22 23 function js() { 24 25 if ( isset( $_POST['textcolor'] ) ) { 26 check_admin_referer('custom-header'); 27 if ( 'blank' == $_POST['textcolor'] ) { 28 set_theme_mod('header_textcolor', 'blank'); 29 } else { 30 $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['textcolor']); 31 if ( strlen($color) == 6 || strlen($color) == 3 ) 32 set_theme_mod('header_textcolor', $color); 33 } 34 } 35 if ( isset($_POST['resetheader']) ) { 36 check_admin_referer('custom-header'); 37 remove_theme_mods(); 38 } 39 ?> 40 <script type="text/javascript"> 41 42 function onEndCrop( coords, dimensions ) { 43 $( 'x1' ).value = coords.x1; 44 $( 'y1' ).value = coords.y1; 45 $( 'x2' ).value = coords.x2; 46 $( 'y2' ).value = coords.y2; 47 $( 'width' ).value = dimensions.width; 48 $( 'height' ).value = dimensions.height; 49 } 50 51 // with a supplied ratio 52 Event.observe( 53 window, 54 'load', 55 function() { 56 var xinit = <?php echo HEADER_IMAGE_WIDTH; ?>; 57 var yinit = <?php echo HEADER_IMAGE_HEIGHT; ?>; 58 var ratio = xinit / yinit; 59 var ximg = $('upload').width; 60 var yimg = $('upload').height; 61 if ( yimg < yinit || ximg < xinit ) { 62 if ( ximg / yimg > ratio ) { 63 yinit = yimg; 64 xinit = yinit * ratio; 65 } else { 66 xinit = ximg; 67 yinit = xinit / ratio; 68 } 69 } 70 new Cropper.Img( 71 'upload', 72 { 73 ratioDim: { x: xinit, y: yinit }, 74 displayOnInit: true, 75 onEndCrop: onEndCrop 76 } 77 ) 78 } 79 ); 80 81 var cp = new ColorPicker(); 82 83 function pickColor(color) { 84 $('name').style.color = color; 85 $('desc').style.color = color; 86 $('textcolor').value = color; 87 } 88 function PopupWindow_hidePopup(magicword) { 89 if ( magicword != 'prettyplease' ) 90 return false; 91 if (this.divName != null) { 92 if (this.use_gebi) { 93 document.getElementById(this.divName).style.visibility = "hidden"; 94 } 95 else if (this.use_css) { 96 document.all[this.divName].style.visibility = "hidden"; 97 } 98 else if (this.use_layers) { 99 document.layers[this.divName].visibility = "hidden"; 100 } 101 } 102 else { 103 if (this.popupWindow && !this.popupWindow.closed) { 104 this.popupWindow.close(); 105 this.popupWindow = null; 106 } 107 } 108 return false; 109 } 110 function colorSelect(t,p) { 111 if ( cp.p == p && document.getElementById(cp.divName).style.visibility != "hidden" ) { 112 cp.hidePopup('prettyplease'); 113 } else { 114 cp.p = p; 115 cp.select(t,p); 116 } 117 } 118 function colorDefault() { 119 pickColor('<?php echo HEADER_TEXTCOLOR; ?>'); 120 } 121 122 function hide_text() { 123 $('name').style.display = 'none'; 124 $('desc').style.display = 'none'; 125 $('pickcolor').style.display = 'none'; 126 $('defaultcolor').style.display = 'none'; 127 $('textcolor').value = 'blank'; 128 $('hidetext').value = '<?php _e('Show Text'); ?>'; 129 // $('hidetext').onclick = 'show_text()'; 130 Event.observe( $('hidetext'), 'click', show_text ); 131 } 132 133 function show_text() { 134 $('name').style.display = 'block'; 135 $('desc').style.display = 'block'; 136 $('pickcolor').style.display = 'inline'; 137 $('defaultcolor').style.display = 'inline'; 138 $('textcolor').value = '<?php echo HEADER_TEXTCOLOR; ?>'; 139 $('hidetext').value = '<?php _e('Hide Text'); ?>'; 140 Event.stopObserving( $('hidetext'), 'click', show_text ); 141 Event.observe( $('hidetext'), 'click', hide_text ); 142 } 143 144 <?php if ( 'blank' == get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) ) { ?> 145 Event.observe( window, 'load', hide_text ); 146 <?php } ?> 147 148 </script> 149 <?php 150 } 151 152 function step_1() { 153 if ( $_GET['updated'] ) { ?> 154 <div id="message" class="updated fade"> 155 <p><?php _e('Header updated.') ?></p> 156 </div> 157 <?php } ?> 158 159 <div class="wrap"> 160 <h2><?php _e('Your Header Image'); ?></h2> 161 <p><?php _e('This is your header image. You can change the text color or upload and crop a new image.'); ?></p> 162 163 <div id="headimg" style="background-image: url(<?php clean_url(header_image()) ?>);"> 164 <h1><a onclick="return false;" href="<?php bloginfo('url'); ?>" title="<?php bloginfo('name'); ?>" id="name"><?php bloginfo('name'); ?></a></h1> 165 <div id="desc"><?php bloginfo('description');?></div> 166 </div> 167 <?php if ( !defined( 'NO_HEADER_TEXT' ) ) { ?> 168 <form method="post" action="<?php echo get_option('siteurl') ?>/wp-admin/themes.php?page=custom-header&updated=true"> 169 <input type="button" value="<?php _e('Hide Text'); ?>" onclick="hide_text()" id="hidetext" /> 170 <input type="button" value="<?php _e('Select a Text Color'); ?>" onclick="colorSelect($('textcolor'), 'pickcolor')" id="pickcolor" /><input type="button" value="<?php _e('Use Original Color'); ?>" onclick="colorDefault()" id="defaultcolor" /> 171 <?php wp_nonce_field('custom-header') ?> 172 <input type="hidden" name="textcolor" id="textcolor" value="#<?php attribute_escape(header_textcolor()) ?>" /><input name="submit" type="submit" value="<?php _e('Save Changes »'); ?>" /></form> 173 <?php } ?> 174 175 <div id="colorPickerDiv" style="z-index: 100;background:#eee;border:1px solid #ccc;position:absolute;visibility:hidden;"> </div> 176 </div> 177 <div class="wrap"> 178 <h2><?php _e('Upload New Header Image'); ?></h2><p><?php _e('Here you can upload a custom header image to be shown at the top of your blog instead of the default one. On the next screen you will be able to crop the image.'); ?></p> 179 <p><?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> 180 181 <form enctype="multipart/form-data" id="uploadForm" method="POST" action="<?php echo attribute_escape(add_query_arg('step', 2)) ?>" style="margin: auto; width: 50%;"> 182 <label for="upload"><?php _e('Choose an image from your computer:'); ?></label><br /><input type="file" id="upload" name="import" /> 183 <input type="hidden" name="action" value="save" /> 184 <?php wp_nonce_field('custom-header') ?> 185 <p class="submit"> 186 <input type="submit" value="<?php _e('Upload »'); ?>" /> 187 </p> 188 </form> 189 190 </div> 191 192 <?php if ( get_theme_mod('header_image') || get_theme_mod('header_textcolor') ) : ?> 193 <div class="wrap"> 194 <h2><?php _e('Reset Header Image and Color'); ?></h2> 195 <p><?php _e('This will restore the original header image and color. You will not be able to retrieve any customizations.') ?></p> 196 <form method="post" action="<?php echo attribute_escape(add_query_arg('step', 1)) ?>"> 197 <?php wp_nonce_field('custom-header'); ?> 198 <input type="submit" name="resetheader" value="<?php _e('Restore Original Header'); ?>" /> 199 </form> 200 </div> 201 <?php endif; 202 203 } 204 205 function step_2() { 206 check_admin_referer('custom-header'); 207 $overrides = array('test_form' => false); 208 $file = wp_handle_upload($_FILES['import'], $overrides); 209 210 if ( isset($file['error']) ) 211 die( $file['error'] ); 212 213 $url = $file['url']; 214 $file = $file['file']; 215 $filename = basename($file); 216 217 // Construct the object array 218 $object = array( 219 'post_title' => $filename, 220 'post_content' => $url, 221 'post_mime_type' => 'import', 222 'guid' => $url); 223 224 // Save the data 225 $id = wp_insert_attachment($object, $file); 226 227 list($width, $height, $type, $attr) = getimagesize( $file ); 228 229 if ( $width == HEADER_IMAGE_WIDTH && $height == HEADER_IMAGE_HEIGHT ) { 230 set_theme_mod('header_image', clean_url($url)); 231 apply_filters('wp_create_file_in_uploads', $file, $id); // For replication 232 return $this->finished(); 233 } elseif ( $width > HEADER_IMAGE_WIDTH ) { 234 $oitar = $width / HEADER_IMAGE_WIDTH; 235 $image = wp_crop_image($file, 0, 0, $width, $height, HEADER_IMAGE_WIDTH, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file)); 236 $image = apply_filters('wp_create_file_in_uploads', $image, $id); // For replication 237 238 $url = str_replace(basename($url), basename($image), $url); 239 $width = $width / $oitar; 240 $height = $height / $oitar; 241 } else { 242 $oitar = 1; 243 } 244 ?> 245 246 <div class="wrap"> 247 248 <form method="POST" action="<?php echo attribute_escape(add_query_arg('step', 3)) ?>"> 249 250 <p><?php _e('Choose the part of the image you want to use as your header.'); ?></p> 251 <div id="testWrap"> 252 <img src="<?php echo $url; ?>" id="upload" width="<?php echo $width; ?>" height="<?php echo $height; ?>" /> 253 </div> 254 255 <p class="submit"> 256 <input type="hidden" name="x1" id="x1" /> 257 <input type="hidden" name="y1" id="y1" /> 258 <input type="hidden" name="x2" id="x2" /> 259 <input type="hidden" name="y2" id="y2" /> 260 <input type="hidden" name="width" id="width" /> 261 <input type="hidden" name="height" id="height" /> 262 <input type="hidden" name="attachment_id" id="attachment_id" value="<?php echo $id; ?>" /> 263 <input type="hidden" name="oitar" id="oitar" value="<?php echo $oitar; ?>" /> 264 <?php wp_nonce_field('custom-header') ?> 265 <input type="submit" value="<?php _e('Crop Header »'); ?>" /> 266 </p> 267 268 </form> 269 </div> 270 <?php 271 } 272 273 function step_3() { 274 check_admin_referer('custom-header'); 275 if ( $_POST['oitar'] > 1 ) { 276 $_POST['x1'] = $_POST['x1'] * $_POST['oitar']; 277 $_POST['y1'] = $_POST['y1'] * $_POST['oitar']; 278 $_POST['width'] = $_POST['width'] * $_POST['oitar']; 279 $_POST['height'] = $_POST['height'] * $_POST['oitar']; 280 } 281 282 $header = wp_crop_image($_POST['attachment_id'], $_POST['x1'], $_POST['y1'], $_POST['width'], $_POST['height'], HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT); 283 $header = apply_filters('wp_create_file_in_uploads', $header); // For replication 284 285 $parent = get_post($_POST['attachment_id']); 286 287 $parent_url = $parent->guid; 288 289 $url = str_replace(basename($parent_url), basename($header), $parent_url); 290 291 set_theme_mod('header_image', $url); 292 293 // cleanup 294 $file = get_attached_file( $_POST['attachment_id'] ); 295 $medium = str_replace(basename($file), 'midsize-'.basename($file), $file); 296 @unlink( apply_filters( 'wp_delete_file', $medium ) ); 297 wp_delete_attachment( $_POST['attachment_id'] ); 298 299 return $this->finished(); 300 } 301 302 function finished() { 303 ?> 304 <div class="wrap"> 305 <h2><?php _e('Header complete!'); ?></h2> 306 307 <p><?php _e('Visit your site and you should see the new header now.'); ?></p> 308 309 </div> 310 <?php 311 } 312 313 function admin_page() { 314 if ( !isset( $_GET['step'] ) ) 315 $step = 1; 316 else 317 $step = (int) $_GET['step']; 318 319 if ( 1 == $step ) { 320 $this->step_1(); 321 } elseif ( 2 == $step ) { 322 $this->step_2(); 323 } elseif ( 3 == $step ) { 324 $this->step_3(); 325 } 326 327 } 328 329 } 330 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated Thu Dec 6 06:47:08 2007 for RedAlt XRefs | Cross-referenced by PHPXref 0.6 and RedAlt |