/var/www/wordpress/wp-admin/includes/admin.php
/var/www/wordpress/wp-admin/includes/bookmark.php
/var/www/wordpress/wp-admin/includes/class-ftp-pure.php
/var/www/wordpress/wp-admin/includes/class-ftp-sockets.php
/var/www/wordpress/wp-admin/includes/class-ftp.php
/var/www/wordpress/wp-admin/includes/class-pclzip.php
/var/www/wordpress/wp-admin/includes/class-wp-filesystem-base.php
/var/www/wordpress/wp-admin/includes/class-wp-filesystem-direct.php
/var/www/wordpress/wp-admin/includes/class-wp-filesystem-ftpext.php
/var/www/wordpress/wp-admin/includes/class-wp-filesystem-ftpsockets.php
/var/www/wordpress/wp-admin/includes/class-wp-filesystem-ssh2.php
/var/www/wordpress/wp-admin/includes/class-wp-importer.php
/var/www/wordpress/wp-admin/includes/class-wp-upgrader.php
/var/www/wordpress/wp-admin/includes/comment.php
/var/www/wordpress/wp-admin/includes/continents-cities.php
/var/www/wordpress/wp-admin/includes/dashboard.php
/var/www/wordpress/wp-admin/includes/deprecated.php
/var/www/wordpress/wp-admin/includes/export.php
/var/www/wordpress/wp-admin/includes/file.php
/var/www/wordpress/wp-admin/includes/image-edit.php
/var/www/wordpress/wp-admin/includes/image.php
/var/www/wordpress/wp-admin/includes/import.php
/var/www/wordpress/wp-admin/includes/manifest.php
/var/www/wordpress/wp-admin/includes/media.php
/var/www/wordpress/wp-admin/includes/meta-boxes.php
/var/www/wordpress/wp-admin/includes/misc.php
/var/www/wordpress/wp-admin/includes/ms-deprecated.php
/var/www/wordpress/wp-admin/includes/ms.php
/var/www/wordpress/wp-admin/includes/nav-menu.php
/var/www/wordpress/wp-admin/includes/plugin-install.php
/var/www/wordpress/wp-admin/includes/plugin.php
/var/www/wordpress/wp-admin/includes/post.php
/var/www/wordpress/wp-admin/includes/schema.php
/var/www/wordpress/wp-admin/includes/taxonomy.php
/var/www/wordpress/wp-admin/includes/template.php
/var/www/wordpress/wp-admin/includes/theme-install.php
/var/www/wordpress/wp-admin/includes/theme.php
/var/www/wordpress/wp-admin/includes/update-core.php
/var/www/wordpress/wp-admin/includes/update.php
/var/www/wordpress/wp-admin/includes/upgrade.php
/var/www/wordpress/wp-admin/includes/user.php
/var/www/wordpress/wp-admin/includes/widgets.php
/var/www/wordpress/wp-admin/js/revisions-js.php
/var/www/wordpress/wp-admin/maint/repair.php
/var/www/wordpress/wp-admin/admin-ajax.php
/var/www/wordpress/wp-admin/admin-footer.php
/var/www/wordpress/wp-admin/admin-functions.php
/var/www/wordpress/wp-admin/admin-header.php
/var/www/wordpress/wp-admin/admin-post.php
/var/www/wordpress/wp-admin/admin.php
/var/www/wordpress/wp-admin/async-upload.php
/var/www/wordpress/wp-admin/comment.php
/var/www/wordpress/wp-admin/custom-background.php
/var/www/wordpress/wp-admin/custom-header.php
#CodeDescriptions
1<?php
2/**
3 * The custom header image script.
4 *
5 * @package WordPress
6 * @subpackage Administration
7 */
8
9/**
10 * The custom header image class.
11 *
12 * @since 2.1.0
13 * @package WordPress
14 * @subpackage Administration
15 */
16class Custom_Image_Header {
17
18 /**
19 * Callback for administration header.
20 *
21 * @var callback
22 * @since 2.1.0
23 * @access private
24 */
25 var $admin_header_callback;
26
27 /**
28 * Callback for header div.
29 *
30 * @var callback
31 * @since 3.0.0
32 * @access private
33 */
34 var $admin_image_div_callback;
35
36 /**
37 * Holds default headers.
38 *
39 * @var array
40 * @since 3.0.0
41 * @access private
42 */
43 var $default_headers = array();
44
45 /**
46 * Holds the page menu hook.
47 *
48 * @var string
49 * @since 3.0.0
50 * @access private
51 */
52 var $page = '';
53
54 /**
55 * PHP4 Constructor - Register administration header callback.
56 *
57 * @since 2.1.0
58 * @param callback $admin_header_callback
59 * @param callback $admin_image_div_callback Optional custom image div output callback.
60 * @return Custom_Image_Header
61 */
62 function Custom_Image_Header($admin_header_callback, $admin_image_div_callback = '') {
63 $this->admin_header_callback = $admin_header_callback;
64 $this->admin_image_div_callback = $admin_image_div_callback;
65 }
66
67 /**
68 * Set up the hooks for the Custom Header admin page.
69 *
70 * @since 2.1.0
71 */
72 function init() {
73 if ( ! current_user_can('edit_theme_options') )
74 return;
75
76 $this->page = $page = add_theme_page(__('Header'), __('Header'), 'edit_theme_options', 'custom-header', array(&$this, 'admin_page'));
77
78 add_action("admin_print_scripts-$page", array(&$this, 'js_includes'));
79 add_action("admin_print_styles-$page", array(&$this, 'css_includes'));
80 add_action("admin_head-$page", array(&$this, 'help') );
81 add_action("admin_head-$page", array(&$this, 'take_action'), 50);
82 add_action("admin_head-$page", array(&$this, 'js'), 50);
83 add_action("admin_head-$page", $this->admin_header_callback, 51);
84 }
85
86 /**
87 * Adds contextual help.
88 *
89 * @since 3.0.0
90 */
91 function help() {
92 add_contextual_help( $this->page, '<p>' . __( 'You can set a custom image header for your site. Simply upload the image and crop it, and the new header will go live immediately.' ) . '</p>' .
93 '<p>' . __( 'If you want to discard your custom header and go back to the default included in your theme, click on the buttons to remove the custom image and restore the original header image.' ) . '</p>' .
94 '<p>' . __( 'Some themes come with additional header images bundled. If you see multiple images displayed, select the one you’d like and click the Save Changes button.' ) . '</p>' .
95 '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
96 '<p>' . __( '<a href="http://codex.wordpress.org/Appearance_Header_SubPanel" target="_blank">Documentation on Custom Header</a>' ) . '</p>' .
97 '<p>' . __( '<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>' ) . '</p>' );
98 }
99
100 /**
101 * Get the current step.
102 *
103 * @since 2.6.0
104 *
105 * @return int Current step
106 */
107 function step() {
108 if ( ! isset( $_GET['step'] ) )
109 return 1;
110
111 $step = (int) $_GET['step'];
112 if ( $step < 1 || 3 < $step )
113 $step = 1;
114
115 return $step;
116 }
117
118 /**
119 * Set up the enqueue for the JavaScript files.
120 *
121 * @since 2.1.0
122 */
123 function js_includes() {
124 $step = $this->step();
125
126 if ( ( 1 == $step || 3 == $step ) && $this->header_text() )
127 wp_enqueue_script('farbtastic');
128 elseif ( 2 == $step )
129 wp_enqueue_script('imgareaselect');
130 }
131
132 /**
133 * Set up the enqueue for the CSS files
134 *
135 * @since 2.7
136 */
137 function css_includes() {
138 $step = $this->step();
139
140 if ( ( 1 == $step || 3 == $step ) && $this->header_text() )
141 wp_enqueue_style('farbtastic');
142 elseif ( 2 == $step )
143 wp_enqueue_style('imgareaselect');
144 }
145
146 /**
147 * Check if header text is allowed
148 *
149 * @since 3.0.0
150 */
151 function header_text() {
152 if ( defined( 'NO_HEADER_TEXT' ) && NO_HEADER_TEXT )
153 return false;
154
155 return true;
156 }
157
158 /**
159 * Execute custom header modification.
160 *
161 * @since 2.6.0
162 */
163 function take_action() {
164 if ( ! current_user_can('edit_theme_options') )
165 return;
166
167 if ( empty( $_POST ) )
168 return;
169
170 $this->updated = true;
171
172 if ( isset( $_POST['resetheader'] ) ) {
173 check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
174 remove_theme_mod( 'header_image' );
175 return;
176 }
177
178 if ( isset( $_POST['resettext'] ) ) {
179 check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
180 remove_theme_mod('header_textcolor');
181 return;
182 }
183
184 if ( isset( $_POST['removeheader'] ) ) {
185 check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
186 set_theme_mod( 'header_image', '' );
187 return;
188 }
189
190 if ( isset( $_POST['text-color'] ) ) {
191 check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
192 $_POST['text-color'] = str_replace( '#', '', $_POST['text-color'] );
193 if ( 'blank' == $_POST['text-color'] ) {
194 set_theme_mod( 'header_textcolor', 'blank' );
195 } else {
196 $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['text-color']);
197 if ( strlen($color) == 6 || strlen($color) == 3 )
198 set_theme_mod('header_textcolor', $color);
199 }
200 }
201
202 if ( isset($_POST['default-header']) ) {
203 check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
204 $this->process_default_headers();
205 if ( isset($this->default_headers[$_POST['default-header']]) )
206 set_theme_mod('header_image', esc_url($this->default_headers[$_POST['default-header']]['url']));
207 }
208 }
209
210 /**
211 * Process the default headers
212 *
213 * @since 3.0.0
214 */
215 function process_default_headers() {
216 global $_wp_default_headers;
217
218 if ( !empty($this->headers) )
219 return;
220
221 if ( !isset($_wp_default_headers) )
222 return;
223
224 $this->default_headers = $_wp_default_headers;
225 foreach ( array_keys($this->default_headers) as $header ) {
226 $this->default_headers[$header]['url'] = sprintf( $this->default_headers[$header]['url'], get_template_directory_uri(), get_stylesheet_directory_uri() );//Cross Site Scripting
227 $this->default_headers[$header]['thumbnail_url'] = sprintf( $this->default_headers[$header]['thumbnail_url'], get_template_directory_uri(), get_stylesheet_directory_uri() );//Cross Site Scripting
228 }
229 }
230
231 /**
232 * Display UI for selecting one of several default headers.
233 *
234 * @since 3.0.0
235 */
236 function show_default_header_selector() {
237 echo '<div id="available-headers">';
238 foreach ( $this->default_headers as $header_key => $header ) {
239 $header_thumbnail = $header['thumbnail_url'];
240 $header_url = $header['url'];
241 $header_desc = $header['description'];
242 echo '<div class="default-header">';
243 echo '<label><input name="default-header" type="radio" value="' . esc_attr($header_key) . '" ' . checked($header_url, get_theme_mod( 'header_image' ), false) . ' />';
244 echo '<img src="' . $header_thumbnail . '" alt="' . esc_attr($header_desc) .'" title="' . esc_attr($header_desc) .'" /></label>';
245 echo '</div>';
246 }
247 echo '<div class="clear"></div></div>';
248 }
249
250 /**
251 * Execute Javascript depending on step.
252 *
253 * @since 2.1.0
254 */
255 function js() {
256 $step = $this->step();
257 if ( ( 1 == $step || 3 == $step ) && $this->header_text() )
258 $this->js_1();
259 elseif ( 2 == $step )
260 $this->js_2();
261 }
262
263 /**
264 * Display Javascript based on Step 1 and 3.
265 *
266 * @since 2.6.0
267 */
268 function js_1() { ?>
269<script type="text/javascript">
270/* <![CDATA[ */
271 var text_objects = ['#name', '#desc', '#text-color-row'];
272 var farbtastic;
273 var default_color = '#<?php echo HEADER_TEXTCOLOR; ?>';
274 var old_color = null;
275
276 function pickColor(color) {
277 jQuery('#name').css('color', color);
278 jQuery('#desc').css('color', color);
279 jQuery('#text-color').val(color);
280 farbtastic.setColor(color);
281 }
282
283 function toggle_text(s) {
284 if (jQuery(s).attr('id') == 'showtext' && jQuery('#text-color').val() != 'blank')
285 return;
286
287 if (jQuery(s).attr('id') == 'hidetext' && jQuery('#text-color').val() == 'blank')
288 return;
289
290 if (jQuery('#text-color').val() == 'blank') {
291 //Show text
292 if (old_color == '#blank')
293 old_color = default_color;
294
295 jQuery( text_objects.toString() ).show();
296 jQuery('#text-color').val(old_color);
297 jQuery('#name').css('color', old_color);
298 jQuery('#desc').css('color', old_color);
299 pickColor(old_color);
300 } else {
301 //Hide text
302 jQuery( text_objects.toString() ).hide();
303 old_color = jQuery('#text-color').val();
304 jQuery('#text-color').val('blank');
305 }
306 }
307
308 jQuery(document).ready(function() {
309 jQuery('#pickcolor').click(function() {
310 jQuery('#color-picker').show();
311 });
312
313 jQuery('input[name="hidetext"]').click(function() {
314 toggle_text(this);
315 });
316
317 jQuery('#defaultcolor').click(function() {
318 pickColor(default_color);
319 jQuery('#text-color').val(default_color)
320 });
321
322 jQuery('#text-color').keyup(function() {
323 var _hex = jQuery('#text-color').val();
324 var hex = _hex;
325 if ( hex[0] != '#' )
326 hex = '#' + hex;
327 hex = hex.replace(/[^#a-fA-F0-9]+/, '');
328 if ( hex != _hex )
329 jQuery('#text-color').val(hex);
330 if ( hex.length == 4 || hex.length == 7 )
331 pickColor( hex );
332 });
333
334 jQuery(document).mousedown(function(){
335 jQuery('#color-picker').each( function() {
336 var display = jQuery(this).css('display');
337 if (display == 'block')
338 jQuery(this).fadeOut(2);
339 });
340 });
341
342 farbtastic = jQuery.farbtastic('#color-picker', function(color) { pickColor(color); });
343 <?php if ( $color = get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) ) { ?>
344 pickColor('#<?php echo $color; ?>');//Cross Site Scripting
345 <?php } ?>
346
347 <?php if ( 'blank' == get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ) || '' == get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) || ! $this->header_text() ) { ?>
348 toggle_text();
349 <?php } ?>
350 });
351</script>
352<?php
353 }
354
355 /**
356 * Display Javascript based on Step 2.
357 *
358 * @since 2.6.0
359 */
360 function js_2() { ?>
361<script type="text/javascript">
362/* <![CDATA[ */
363 function onEndCrop( coords ) {
364 jQuery( '#x1' ).val(coords.x);
365 jQuery( '#y1' ).val(coords.y);
366 jQuery( '#width' ).val(coords.w);
367 jQuery( '#height' ).val(coords.h);
368 }
369
370 jQuery(document).ready(function() {
371 var xinit = <?php echo HEADER_IMAGE_WIDTH; ?>;
372 var yinit = <?php echo HEADER_IMAGE_HEIGHT; ?>;
373 var ratio = xinit / yinit;
374 var ximg = jQuery('img#upload').width();
375 var yimg = jQuery('img#upload').height();
376
377 if ( yimg < yinit || ximg < xinit ) {
378 if ( ximg / yimg > ratio ) {
379 yinit = yimg;
380 xinit = yinit * ratio;
381 } else {
382 xinit = ximg;
383 yinit = xinit / ratio;
384 }
385 }
386
387 jQuery('img#upload').imgAreaSelect({
388 handles: true,
389 keys: true,
390 aspectRatio: xinit + ':' + yinit,
391 show: true,
392 x1: 0,
393 y1: 0,
394 x2: xinit,
395 y2: yinit,
396 maxHeight: <?php echo HEADER_IMAGE_HEIGHT; ?>,
397 maxWidth: <?php echo HEADER_IMAGE_WIDTH; ?>,
398 onInit: function () {
399 jQuery('#width').val(xinit);
400 jQuery('#height').val(yinit);
401 },
402 onSelectChange: function(img, c) {
403 jQuery('#x1').val(c.x1);
404 jQuery('#y1').val(c.y1);
405 jQuery('#width').val(c.width);
406 jQuery('#height').val(c.height);
407 }
408 });
409 });
410/* ]]> */
411</script>
412<?php
413 }
414
415 /**
416 * Display first step of custom header image page.
417 *
418 * @since 2.1.0
419 */
420 function step_1() {
421 $this->process_default_headers();
422?>
423
424<div class="wrap">
425<?php screen_icon(); ?>
426<h2><?php _e('Custom Header'); ?></h2>
427
428<?php if ( ! empty( $this->updated ) ) { ?>
429<div id="message" class="updated">
430<p><?php printf( __( 'Header updated. <a href="%s">Visit your site</a> to see how it looks.' ), home_url( '/' ) ); ?></p>
431</div>
432<?php } ?>
433
434<h3><?php _e( 'Header Image' ) ?></h3>
435<table class="form-table">
436<tbody>
437
438
439<tr valign="top">
440<th scope="row"><?php _e( 'Preview' ); ?></th>
441<td >
442 <?php if ( $this->admin_image_div_callback ) {
443 call_user_func( $this->admin_image_div_callback );
444 } else {
445 ?>
446 <div id="headimg" style="max-width:<?php echo HEADER_IMAGE_WIDTH; ?>px;height:<?php echo HEADER_IMAGE_HEIGHT; ?>px;background-image:url(<?php esc_url ( header_image() ) ?>);">
447 <?php
448 if ( 'blank' == get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) || '' == get_theme_mod('header_textcolor', HEADER_TEXTCOLOR) || ! $this->header_text() )
449 $style = ' style="display:none;"';
450 else
451 $style = ' style="color:#' . get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ) . ';"';
452 ?>
453 <h1><a id="name"<?php echo $style; ?> onclick="return false;" href="<?php bloginfo('url'); ?>"><?php bloginfo( 'name' ); ?></a></h1>//Cross Site Scripting
454 <div id="desc"<?php echo $style; ?>><?php bloginfo( 'description' ); ?></div>//Cross Site Scripting
455 </div>
456 <?php } ?>
457</td>
458</tr>
459
460<tr valign="top">
461<th scope="row"><?php _e( 'Upload Image' ); ?></th>
462<td>
463 <p><?php _e( '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.' ); ?><br />
464 <?php printf( __( 'Images of exactly <strong>%1$d × %2$d pixels</strong> will be used as-is.' ), HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT ); ?></p>
465 <form enctype="multipart/form-data" id="upload-form" method="post" action="<?php echo esc_attr( add_query_arg( 'step', 2 ) ) ?>">
466 <p>
467 <label for="upload"><?php _e( 'Choose an image from your computer:' ); ?></label><br />
468 <input type="file" id="upload" name="import" />
469 <input type="hidden" name="action" value="save" />
470 <?php wp_nonce_field( 'custom-header-upload', '_wpnonce-custom-header-upload' ) ?>
471 <input type="submit" class="button" value="<?php esc_attr_e( 'Upload' ); ?>" />
472 </p>
473 </form>
474</td>
475</tr>
476</tbody>
477</table>
478
479<form method="post" action="<?php echo esc_attr( add_query_arg( 'step', 1 ) ) ?>">
480<table class="form-table">
481<tbody>
482 <?php if ( ! empty( $this->default_headers ) ) : ?>
483<tr valign="top">
484<th scope="row"><?php _e( 'Default Images' ); ?></th>
485<td>
486 <p><?php _e( 'If you don‘t want to upload your own image, you can use one of these cool headers.' ) ?></p>
487 <?php
488 $this->show_default_header_selector();
489 ?>
490</td>
491</tr>
492 <?php endif;
493
494 if ( get_header_image() ) : ?>
495<tr valign="top">
496<th scope="row"><?php _e( 'Remove Image' ); ?></th>
497<td>
498 <p><?php _e( 'This will remove the header image. You will not be able to restore any customizations.' ) ?></p>
499 <input type="submit" class="button" name="removeheader" value="<?php esc_attr_e( 'Remove Header Image' ); ?>" />
500</td>
501</tr>
502 <?php endif;
503
504 if ( defined( 'HEADER_IMAGE' ) ) : ?>
505<tr valign="top">
506<th scope="row"><?php _e( 'Reset Image' ); ?></th>
507<td>
508 <p><?php _e( 'This will restore the original header image. You will not be able to restore any customizations.' ) ?></p>
509 <input type="submit" class="button" name="resetheader" value="<?php esc_attr_e( 'Restore Original Header Image' ); ?>" />
510</td>
511</tr>
512 <?php endif; ?>
513</tbody>
514</table>
515
516 <?php if ( $this->header_text() ) : ?>
517<h3><?php _e( 'Header Text' ) ?></h3>
518<table class="form-table">
519<tbody>
520<tr valign="top" class="hide-if-no-js">
521<th scope="row"><?php _e( 'Display Text' ); ?></th>
522<td>
523 <p>
524 <?php $hidetext = get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ); ?>
525 <label><input type="radio" value="1" name="hidetext" id="hidetext"<?php checked( ( 'blank' == $hidetext || empty( $hidetext ) ) ? true : false ); ?> /> <?php _e( 'No' ); ?></label>
526 <label><input type="radio" value="0" name="hidetext" id="showtext"<?php checked( ( 'blank' == $hidetext || empty( $hidetext ) ) ? false : true ); ?> /> <?php _e( 'Yes' ); ?></label>
527 </p>
528</td>
529</tr>
530
531<tr valign="top" id="text-color-row">
532<th scope="row"><?php _e( 'Text Color' ); ?></th>
533<td>
534 <p>
535 <input type="text" name="text-color" id="text-color" value="#<?php echo esc_attr( get_theme_mod( 'header_textcolor', HEADER_TEXTCOLOR ) ); ?>" />
536 <span class="description hide-if-js"><?php _e( 'If you want to hide header text, add <strong>#blank</strong> as text color.' );?></span>
537 <input type="button" class="button hide-if-no-js" value="<?php esc_attr_e( 'Select a Color' ); ?>" id="pickcolor" />
538 </p>
539 <div id="color-picker" style="z-index: 100; background:#eee; border:1px solid #ccc; position:absolute; display:none;"></div>
540</td>
541</tr>
542
543 <?php if ( defined('HEADER_TEXTCOLOR') && get_theme_mod('header_textcolor') ) { ?>
544<tr valign="top">
545<th scope="row"><?php _e('Reset Text Color'); ?></th>
546<td>
547 <p><?php _e( 'This will restore the original header text. You will not be able to restore any customizations.' ) ?></p>
548 <input type="submit" class="button" name="resettext" value="<?php esc_attr_e( 'Restore Original Header Text' ); ?>" />
549</td>
550</tr>
551 <?php } ?>
552
553</tbody>
554</table>
555 <?php endif;
556
557wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
558<p class="submit"><input type="submit" class="button-primary" name="save-header-options" value="<?php esc_attr_e( 'Save Changes' ); ?>" /></p>
559</form>
560</div>
561
562<?php }
563
564 /**
565 * Display second step of custom header image page.
566 *
567 * @since 2.1.0
568 */
569 function step_2() {
570 check_admin_referer('custom-header-upload', '_wpnonce-custom-header-upload');
571 $overrides = array('test_form' => false);
572 $file = wp_handle_upload($_FILES['import'], $overrides);
573
574 if ( isset($file['error']) )
575 wp_die( $file['error'], __( 'Image Upload Error' ) );
576
577 $url = $file['url'];
578 $type = $file['type'];
579 $file = $file['file'];//Arbitrary file disclosing
580 $filename = basename($file);
581
582 // Construct the object array
583 $object = array(
584 'post_title' => $filename,
585 'post_content' => $url,
586 'post_mime_type' => $type,
587 'guid' => $url);
588
589 // Save the data
590 $id = wp_insert_attachment($object, $file);
591
592 list($width, $height, $type, $attr) = getimagesize( $file );
593
594 if ( $width == HEADER_IMAGE_WIDTH && $height == HEADER_IMAGE_HEIGHT ) {
595 // Add the meta-data
596 wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );
597
598 set_theme_mod('header_image', esc_url($url));
599 do_action('wp_create_file_in_uploads', $file, $id); // For replication//Arbitrary file disclosing
600 return $this->finished();
601 } elseif ( $width > HEADER_IMAGE_WIDTH ) {
602 $oitar = $width / HEADER_IMAGE_WIDTH;
603 $image = wp_crop_image($file, 0, 0, $width, $height, HEADER_IMAGE_WIDTH, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file));//Arbitrary file disclosing
604 if ( is_wp_error( $image ) )
605 wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) );
606
607 $image = apply_filters('wp_create_file_in_uploads', $image, $id); // For replication
608
609 $url = str_replace(basename($url), basename($image), $url);
610 $width = $width / $oitar;
611 $height = $height / $oitar;
612 } else {
613 $oitar = 1;
614 }
615 ?>
616
617<div class="wrap">
618<?php screen_icon(); ?>
619<h2><?php _e( 'Crop Header Image' ); ?></h2>
620
621<form method="post" action="<?php echo esc_attr(add_query_arg('step', 3)); ?>">
622 <p class="hide-if-no-js"><?php _e('Choose the part of the image you want to use as your header.'); ?></p>
623 <p class="hide-if-js"><strong><?php _e( 'You need Javascript to choose a part of the image.'); ?></strong></p>
624
625 <div id="crop_image" style="position: relative">
626 <img src="<?php echo esc_url( $url ); ?>" id="upload" width="<?php echo $width; ?>" height="<?php echo $height; ?>" />//Cross Site Scripting
627 </div>
628
629 <p class="submit">
630 <input type="hidden" name="x1" id="x1" value="0"/>
631 <input type="hidden" name="y1" id="y1" value="0"/>
632 <input type="hidden" name="width" id="width" value="<?php echo esc_attr( $width ); ?>"/>
633 <input type="hidden" name="height" id="height" value="<?php echo esc_attr( $height ); ?>"/>
634 <input type="hidden" name="attachment_id" id="attachment_id" value="<?php echo esc_attr( $id ); ?>" />
635 <input type="hidden" name="oitar" id="oitar" value="<?php echo esc_attr( $oitar ); ?>" />
636 <?php wp_nonce_field( 'custom-header-crop-image' ) ?>
637 <input type="submit" class="button-primary" value="<?php esc_attr_e( 'Crop and Publish' ); ?>" />
638 </p>
639</form>
640</div>
641 <?php
642 }
643
644 /**
645 * Display third step of custom header image page.
646 *
647 * @since 2.1.0
648 */
649 function step_3() {
650 check_admin_referer('custom-header-crop-image');
651 if ( $_POST['oitar'] > 1 ) {
652 $_POST['x1'] = $_POST['x1'] * $_POST['oitar'];
653 $_POST['y1'] = $_POST['y1'] * $_POST['oitar'];
654 $_POST['width'] = $_POST['width'] * $_POST['oitar'];
655 $_POST['height'] = $_POST['height'] * $_POST['oitar'];
656 }
657
658 $original = get_attached_file( $_POST['attachment_id'] );//Arbitrary file disclosing
659
660 $cropped = wp_crop_image($_POST['attachment_id'], $_POST['x1'], $_POST['y1'], $_POST['width'], $_POST['height'], HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT);
661 if ( is_wp_error( $cropped ) )
662 wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) );
663
664 $cropped = apply_filters('wp_create_file_in_uploads', $cropped, $_POST['attachment_id']); // For replication
665
666 $parent = get_post($_POST['attachment_id']);
667 $parent_url = $parent->guid;
668 $url = str_replace(basename($parent_url), basename($cropped), $parent_url);
669
670 // Construct the object array
671 $object = array(
672 'ID' => $_POST['attachment_id'],
673 'post_title' => basename($cropped),
674 'post_content' => $url,
675 'post_mime_type' => 'image/jpeg',
676 'guid' => $url
677 );
678
679 // Update the attachment
680 wp_insert_attachment($object, $cropped);
681 wp_update_attachment_metadata( $_POST['attachment_id'], wp_generate_attachment_metadata( $_POST['attachment_id'], $cropped ) );
682
683 set_theme_mod('header_image', $url);
684
685 // cleanup
686 $medium = str_replace(basename($original), 'midsize-'.basename($original), $original);
687 @unlink( apply_filters( 'wp_delete_file', $medium ) );//Arbitrary file disclosing
688 @unlink( apply_filters( 'wp_delete_file', $original ) );//Arbitrary file disclosing
689
690 return $this->finished();
691 }
692
693 /**
694 * Display last step of custom header image page.
695 *
696 * @since 2.1.0
697 */
698 function finished() {
699 $this->updated = true;
700 $this->step_1();
701 }
702
703 /**
704 * Display the page based on the current step.
705 *
706 * @since 2.1.0
707 */
708 function admin_page() {
709 if ( ! current_user_can('edit_theme_options') )
710 wp_die(__('You do not have permission to customize headers.'));
711 $step = $this->step();
712 if ( 1 == $step )
713 $this->step_1();
714 elseif ( 2 == $step )
715 $this->step_2();
716 elseif ( 3 == $step )
717 $this->step_3();
718 }
719
720}
721?>
722
/var/www/wordpress/wp-admin/edit-attachment-rows.php
/var/www/wordpress/wp-admin/edit-comments.php
/var/www/wordpress/wp-admin/edit-form-advanced.php
/var/www/wordpress/wp-admin/edit-form-comment.php
/var/www/wordpress/wp-admin/edit-link-categories.php
/var/www/wordpress/wp-admin/edit-link-category-form.php
/var/www/wordpress/wp-admin/edit-link-form.php
/var/www/wordpress/wp-admin/edit-post-rows.php
/var/www/wordpress/wp-admin/edit-tag-form.php
/var/www/wordpress/wp-admin/edit-tags.php
/var/www/wordpress/wp-admin/edit.php
/var/www/wordpress/wp-admin/export.php
/var/www/wordpress/wp-admin/gears-manifest.php
/var/www/wordpress/wp-admin/import.php
/var/www/wordpress/wp-admin/index-extra.php
/var/www/wordpress/wp-admin/index.php
/var/www/wordpress/wp-admin/install-helper.php
/var/www/wordpress/wp-admin/install.php
/var/www/wordpress/wp-admin/link-add.php
/var/www/wordpress/wp-admin/link-category.php
/var/www/wordpress/wp-admin/link-manager.php
/var/www/wordpress/wp-admin/link-parse-opml.php
/var/www/wordpress/wp-admin/link.php
/var/www/wordpress/wp-admin/load-scripts.php
/var/www/wordpress/wp-admin/load-styles.php
/var/www/wordpress/wp-admin/media-new.php
/var/www/wordpress/wp-admin/media-upload.php
/var/www/wordpress/wp-admin/media.php
/var/www/wordpress/wp-admin/menu-header.php
/var/www/wordpress/wp-admin/menu.php
/var/www/wordpress/wp-admin/moderation.php
/var/www/wordpress/wp-admin/ms-admin.php
/var/www/wordpress/wp-admin/ms-delete-site.php
/var/www/wordpress/wp-admin/ms-edit.php
/var/www/wordpress/wp-admin/ms-options.php
/var/www/wordpress/wp-admin/ms-sites.php
/var/www/wordpress/wp-admin/ms-themes.php
/var/www/wordpress/wp-admin/ms-upgrade-network.php
/var/www/wordpress/wp-admin/ms-users.php
/var/www/wordpress/wp-admin/my-sites.php
/var/www/wordpress/wp-admin/nav-menus.php
/var/www/wordpress/wp-admin/network.php
/var/www/wordpress/wp-admin/options-discussion.php
/var/www/wordpress/wp-admin/options-general.php
/var/www/wordpress/wp-admin/options-head.php
/var/www/wordpress/wp-admin/options-media.php
/var/www/wordpress/wp-admin/options-permalink.php
/var/www/wordpress/wp-admin/options-privacy.php
/var/www/wordpress/wp-admin/options-reading.php
/var/www/wordpress/wp-admin/options-writing.php
/var/www/wordpress/wp-admin/options.php
/var/www/wordpress/wp-admin/plugin-editor.php
/var/www/wordpress/wp-admin/plugin-install.php
/var/www/wordpress/wp-admin/plugins.php
/var/www/wordpress/wp-admin/post-new.php
/var/www/wordpress/wp-admin/post.php
/var/www/wordpress/wp-admin/press-this.php
/var/www/wordpress/wp-admin/profile.php
/var/www/wordpress/wp-admin/revision.php
/var/www/wordpress/wp-admin/setup-config.php
/var/www/wordpress/wp-admin/sidebar.php
/var/www/wordpress/wp-admin/theme-editor.php
/var/www/wordpress/wp-admin/theme-install.php
/var/www/wordpress/wp-admin/themes.php
/var/www/wordpress/wp-admin/tools.php
/var/www/wordpress/wp-admin/update-core.php
/var/www/wordpress/wp-admin/update.php
/var/www/wordpress/wp-admin/upgrade-functions.php
/var/www/wordpress/wp-admin/upgrade.php
/var/www/wordpress/wp-admin/upload.php
/var/www/wordpress/wp-admin/user-edit.php
/var/www/wordpress/wp-admin/user-new.php
/var/www/wordpress/wp-admin/users.php
/var/www/wordpress/wp-admin/widgets.php
/var/www/wordpress/wp-content/languages/ru_RU.php
/var/www/wordpress/wp-content/plugins/akismet/akismet.php
/var/www/wordpress/wp-content/plugins/rh/rh.php
/var/www/wordpress/wp-content/plugins/hello.php
/var/www/wordpress/wp-content/plugins/index.php
/var/www/wordpress/wp-content/themes/twentyten/404.php
/var/www/wordpress/wp-content/themes/twentyten/archive.php
/var/www/wordpress/wp-content/themes/twentyten/attachment.php
/var/www/wordpress/wp-content/themes/twentyten/author.php
/var/www/wordpress/wp-content/themes/twentyten/category.php
/var/www/wordpress/wp-content/themes/twentyten/comments.php
/var/www/wordpress/wp-content/themes/twentyten/footer.php
/var/www/wordpress/wp-content/themes/twentyten/functions.php
/var/www/wordpress/wp-content/themes/twentyten/header.php
/var/www/wordpress/wp-content/themes/twentyten/index.php
/var/www/wordpress/wp-content/themes/twentyten/loop.php
/var/www/wordpress/wp-content/themes/twentyten/onecolumn-page.php
/var/www/wordpress/wp-content/themes/twentyten/page.php
/var/www/wordpress/wp-content/themes/twentyten/search.php
/var/www/wordpress/wp-content/themes/twentyten/sidebar-footer.php
/var/www/wordpress/wp-content/themes/twentyten/sidebar.php
/var/www/wordpress/wp-content/themes/twentyten/single.php
/var/www/wordpress/wp-content/themes/twentyten/tag.php
/var/www/wordpress/wp-content/themes/index.php
/var/www/wordpress/wp-content/index.php
/var/www/wordpress/wp-includes/js/tinymce/langs/wp-langs.php
/var/www/wordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/utils/JSON.php
/var/www/wordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/utils/Logger.php
/var/www/wordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/EnchantSpell.php
/var/www/wordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/GoogleSpell.php
/var/www/wordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/PSpell.php
/var/www/wordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/PSpellShell.php
/var/www/wordpress/wp-includes/js/tinymce/plugins/spellchecker/classes/SpellChecker.php
/var/www/wordpress/wp-includes/js/tinymce/plugins/spellchecker/includes/general.php
/var/www/wordpress/wp-includes/js/tinymce/plugins/spellchecker/config.php
/var/www/wordpress/wp-includes/js/tinymce/plugins/spellchecker/rpc.php
/var/www/wordpress/wp-includes/js/tinymce/wp-mce-help.php
/var/www/wordpress/wp-includes/js/tinymce/wp-tinymce.php
/var/www/wordpress/wp-includes/pomo/entry.php
/var/www/wordpress/wp-includes/pomo/mo.php
/var/www/wordpress/wp-includes/pomo/po.php
/var/www/wordpress/wp-includes/pomo/streams.php
/var/www/wordpress/wp-includes/pomo/translations.php
/var/www/wordpress/wp-includes/Text/Diff/Engine/native.php
/var/www/wordpress/wp-includes/Text/Diff/Engine/shell.php
/var/www/wordpress/wp-includes/Text/Diff/Engine/string.php
/var/www/wordpress/wp-includes/Text/Diff/Engine/xdiff.php
/var/www/wordpress/wp-includes/Text/Diff/Renderer/inline.php
/var/www/wordpress/wp-includes/Text/Diff/Renderer.php
/var/www/wordpress/wp-includes/Text/Diff.php
/var/www/wordpress/wp-includes/theme-compat/comments-popup.php
/var/www/wordpress/wp-includes/theme-compat/comments.php
/var/www/wordpress/wp-includes/theme-compat/footer.php
/var/www/wordpress/wp-includes/theme-compat/header.php
/var/www/wordpress/wp-includes/theme-compat/sidebar.php
/var/www/wordpress/wp-includes/atomlib.php
/var/www/wordpress/wp-includes/author-template.php
/var/www/wordpress/wp-includes/bookmark-template.php
/var/www/wordpress/wp-includes/bookmark.php
/var/www/wordpress/wp-includes/cache.php
/var/www/wordpress/wp-includes/canonical.php
/var/www/wordpress/wp-includes/capabilities.php
/var/www/wordpress/wp-includes/category-template.php
/var/www/wordpress/wp-includes/category.php
/var/www/wordpress/wp-includes/class-feed.php
/var/www/wordpress/wp-includes/class-http.php
/var/www/wordpress/wp-includes/class-IXR.php
/var/www/wordpress/wp-includes/class-json.php
/var/www/wordpress/wp-includes/class-oembed.php
/var/www/wordpress/wp-includes/class-phpass.php
/var/www/wordpress/wp-includes/class-phpmailer.php
/var/www/wordpress/wp-includes/class-pop3.php
/var/www/wordpress/wp-includes/class-simplepie.php
/var/www/wordpress/wp-includes/class-smtp.php
/var/www/wordpress/wp-includes/class-snoopy.php
/var/www/wordpress/wp-includes/class.wp-dependencies.php
/var/www/wordpress/wp-includes/class.wp-scripts.php
/var/www/wordpress/wp-includes/class.wp-styles.php
/var/www/wordpress/wp-includes/classes.php
/var/www/wordpress/wp-includes/comment-template.php
/var/www/wordpress/wp-includes/comment.php
/var/www/wordpress/wp-includes/compat.php
/var/www/wordpress/wp-includes/cron.php
/var/www/wordpress/wp-includes/default-constants.php
/var/www/wordpress/wp-includes/default-embeds.php
/var/www/wordpress/wp-includes/default-filters.php
/var/www/wordpress/wp-includes/default-widgets.php
/var/www/wordpress/wp-includes/deprecated.php
/var/www/wordpress/wp-includes/feed-atom-comments.php
/var/www/wordpress/wp-includes/feed-atom.php
/var/www/wordpress/wp-includes/feed-rdf.php
/var/www/wordpress/wp-includes/feed-rss.php
/var/www/wordpress/wp-includes/feed-rss2-comments.php
/var/www/wordpress/wp-includes/feed-rss2.php
/var/www/wordpress/wp-includes/feed.php
/var/www/wordpress/wp-includes/formatting.php
/var/www/wordpress/wp-includes/functions.php
/var/www/wordpress/wp-includes/functions.wp-scripts.php
/var/www/wordpress/wp-includes/functions.wp-styles.php
/var/www/wordpress/wp-includes/general-template.php
/var/www/wordpress/wp-includes/http.php
/var/www/wordpress/wp-includes/kses.php
/var/www/wordpress/wp-includes/l10n.php
/var/www/wordpress/wp-includes/link-template.php
/var/www/wordpress/wp-includes/load.php
/var/www/wordpress/wp-includes/locale.php
/var/www/wordpress/wp-includes/media.php
/var/www/wordpress/wp-includes/meta.php
/var/www/wordpress/wp-includes/ms-blogs.php
/var/www/wordpress/wp-includes/ms-default-constants.php
/var/www/wordpress/wp-includes/ms-default-filters.php
/var/www/wordpress/wp-includes/ms-deprecated.php
/var/www/wordpress/wp-includes/ms-files.php
/var/www/wordpress/wp-includes/ms-functions.php
/var/www/wordpress/wp-includes/ms-load.php
/var/www/wordpress/wp-includes/ms-settings.php
/var/www/wordpress/wp-includes/nav-menu-template.php
/var/www/wordpress/wp-includes/nav-menu.php
/var/www/wordpress/wp-includes/pluggable-deprecated.php
/var/www/wordpress/wp-includes/pluggable.php
/var/www/wordpress/wp-includes/plugin.php
/var/www/wordpress/wp-includes/post-template.php
/var/www/wordpress/wp-includes/post-thumbnail-template.php
/var/www/wordpress/wp-includes/post.php
/var/www/wordpress/wp-includes/query.php
/var/www/wordpress/wp-includes/registration-functions.php
/var/www/wordpress/wp-includes/registration.php
/var/www/wordpress/wp-includes/rewrite.php
/var/www/wordpress/wp-includes/rss-functions.php
/var/www/wordpress/wp-includes/rss.php
/var/www/wordpress/wp-includes/script-loader.php
/var/www/wordpress/wp-includes/shortcodes.php
/var/www/wordpress/wp-includes/taxonomy.php
/var/www/wordpress/wp-includes/template-loader.php
/var/www/wordpress/wp-includes/theme.php
/var/www/wordpress/wp-includes/update.php
/var/www/wordpress/wp-includes/user.php
/var/www/wordpress/wp-includes/vars.php
/var/www/wordpress/wp-includes/version.php
/var/www/wordpress/wp-includes/widgets.php
/var/www/wordpress/wp-includes/wp-db.php
/var/www/wordpress/wp-includes/wp-diff.php
/var/www/wordpress/index.php
/var/www/wordpress/wp-activate.php
/var/www/wordpress/wp-app.php
/var/www/wordpress/wp-atom.php
/var/www/wordpress/wp-blog-header.php
/var/www/wordpress/wp-comments-post.php
/var/www/wordpress/wp-commentsrss2.php
/var/www/wordpress/wp-config-sample.php
/var/www/wordpress/wp-cron.php
/var/www/wordpress/wp-feed.php
/var/www/wordpress/wp-links-opml.php
/var/www/wordpress/wp-load.php
/var/www/wordpress/wp-login.php
/var/www/wordpress/wp-mail.php
/var/www/wordpress/wp-pass.php
/var/www/wordpress/wp-rdf.php
/var/www/wordpress/wp-register.php
/var/www/wordpress/wp-rss.php
/var/www/wordpress/wp-rss2.php
/var/www/wordpress/wp-settings.php
/var/www/wordpress/wp-signup.php
/var/www/wordpress/wp-trackback.php
/var/www/wordpress/xmlrpc.php