~canonical-sysadmins/wordpress/5.1

« back to all changes in this revision

Viewing changes to wp-admin/custom-header.php

  • Committer: Barry Price
  • Date: 2019-02-22 03:51:26 UTC
  • mfrom: (1.2.12 upstream)
  • Revision ID: barry.price@canonical.com-20190222035126-o28k38qs8jfyjsxt
Merge WP5.1 from upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
52
52
         * @param callable $admin_header_callback
53
53
         * @param callable $admin_image_div_callback Optional custom image div output callback.
54
54
         */
55
 
        public function __construct($admin_header_callback, $admin_image_div_callback = '') {
56
 
                $this->admin_header_callback = $admin_header_callback;
 
55
        public function __construct( $admin_header_callback, $admin_image_div_callback = '' ) {
 
56
                $this->admin_header_callback    = $admin_header_callback;
57
57
                $this->admin_image_div_callback = $admin_image_div_callback;
58
58
 
59
59
                add_action( 'admin_menu', array( $this, 'init' ) );
60
60
 
61
 
                add_action( 'customize_save_after',         array( $this, 'customize_set_last_used' ) );
62
 
                add_action( 'wp_ajax_custom-header-crop',   array( $this, 'ajax_header_crop'        ) );
63
 
                add_action( 'wp_ajax_custom-header-add',    array( $this, 'ajax_header_add'         ) );
64
 
                add_action( 'wp_ajax_custom-header-remove', array( $this, 'ajax_header_remove'      ) );
 
61
                add_action( 'customize_save_after', array( $this, 'customize_set_last_used' ) );
 
62
                add_action( 'wp_ajax_custom-header-crop', array( $this, 'ajax_header_crop' ) );
 
63
                add_action( 'wp_ajax_custom-header-add', array( $this, 'ajax_header_add' ) );
 
64
                add_action( 'wp_ajax_custom-header-remove', array( $this, 'ajax_header_remove' ) );
65
65
        }
66
66
 
67
67
        /**
91
91
         * @since 3.0.0
92
92
         */
93
93
        public function help() {
94
 
                get_current_screen()->add_help_tab( array(
95
 
                        'id'      => 'overview',
96
 
                        'title'   => __('Overview'),
97
 
                        'content' =>
98
 
                                '<p>' . __( 'This screen is used to customize the header section of your theme.') . '</p>' .
99
 
                                '<p>' . __( 'You can choose from the theme&#8217;s default header images, or use one of your own. You can also customize how your Site Title and Tagline are displayed.') . '<p>'
100
 
                ) );
101
 
 
102
 
                get_current_screen()->add_help_tab( array(
103
 
                        'id'      => 'set-header-image',
104
 
                        'title'   => __('Header Image'),
105
 
                        'content' =>
106
 
                                '<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. Alternatively, you can use an image that has already been uploaded to your Media Library by clicking the &#8220;Choose Image&#8221; button.' ) . '</p>' .
107
 
                                '<p>' . __( 'Some themes come with additional header images bundled. If you see multiple images displayed, select the one you&#8217;d like and click the &#8220;Save Changes&#8221; button.' ) . '</p>' .
108
 
                                '<p>' . __( 'If your theme has more than one default header image, or you have uploaded more than one custom header image, you have the option of having WordPress display a randomly different image on each page of your site. Click the &#8220;Random&#8221; radio button next to the Uploaded Images or Default Images section to enable this feature.') . '</p>' .
109
 
                                '<p>' . __( 'If you don&#8217;t want a header image to be displayed on your site at all, click the &#8220;Remove Header Image&#8221; button at the bottom of the Header Image section of this page. If you want to re-enable the header image later, you just have to select one of the other image options and click &#8220;Save Changes&#8221;.') . '</p>'
110
 
                ) );
111
 
 
112
 
                get_current_screen()->add_help_tab( array(
113
 
                        'id'      => 'set-header-text',
114
 
                        'title'   => __('Header Text'),
115
 
                        'content' =>
116
 
                                '<p>' . sprintf( __( 'For most themes, the header text is your Site Title and Tagline, as defined in the <a href="%1$s">General Settings</a> section.' ), admin_url( 'options-general.php' ) ) . '<p>' .
117
 
                                '<p>' . __( 'In the Header Text section of this page, you can choose whether to display this text or hide it. You can also choose a color for the text by clicking the Select Color button and either typing in a legitimate HTML hex value, e.g. &#8220;#ff0000&#8221; for red, or by choosing a color using the color picker.' ) . '</p>' .
118
 
                                '<p>' . __( 'Don&#8217;t forget to click &#8220;Save Changes&#8221; when you&#8217;re done!') . '</p>'
119
 
                ) );
 
94
                get_current_screen()->add_help_tab(
 
95
                        array(
 
96
                                'id'      => 'overview',
 
97
                                'title'   => __( 'Overview' ),
 
98
                                'content' =>
 
99
                                        '<p>' . __( 'This screen is used to customize the header section of your theme.' ) . '</p>' .
 
100
                                        '<p>' . __( 'You can choose from the theme&#8217;s default header images, or use one of your own. You can also customize how your Site Title and Tagline are displayed.' ) . '<p>',
 
101
                        )
 
102
                );
 
103
 
 
104
                get_current_screen()->add_help_tab(
 
105
                        array(
 
106
                                'id'      => 'set-header-image',
 
107
                                'title'   => __( 'Header Image' ),
 
108
                                'content' =>
 
109
                                        '<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. Alternatively, you can use an image that has already been uploaded to your Media Library by clicking the &#8220;Choose Image&#8221; button.' ) . '</p>' .
 
110
                                        '<p>' . __( 'Some themes come with additional header images bundled. If you see multiple images displayed, select the one you&#8217;d like and click the &#8220;Save Changes&#8221; button.' ) . '</p>' .
 
111
                                        '<p>' . __( 'If your theme has more than one default header image, or you have uploaded more than one custom header image, you have the option of having WordPress display a randomly different image on each page of your site. Click the &#8220;Random&#8221; radio button next to the Uploaded Images or Default Images section to enable this feature.' ) . '</p>' .
 
112
                                        '<p>' . __( 'If you don&#8217;t want a header image to be displayed on your site at all, click the &#8220;Remove Header Image&#8221; button at the bottom of the Header Image section of this page. If you want to re-enable the header image later, you just have to select one of the other image options and click &#8220;Save Changes&#8221;.' ) . '</p>',
 
113
                        )
 
114
                );
 
115
 
 
116
                get_current_screen()->add_help_tab(
 
117
                        array(
 
118
                                'id'      => 'set-header-text',
 
119
                                'title'   => __( 'Header Text' ),
 
120
                                'content' =>
 
121
                                        '<p>' . sprintf( __( 'For most themes, the header text is your Site Title and Tagline, as defined in the <a href="%1$s">General Settings</a> section.' ), admin_url( 'options-general.php' ) ) . '<p>' .
 
122
                                        '<p>' . __( 'In the Header Text section of this page, you can choose whether to display this text or hide it. You can also choose a color for the text by clicking the Select Color button and either typing in a legitimate HTML hex value, e.g. &#8220;#ff0000&#8221; for red, or by choosing a color using the color picker.' ) . '</p>' .
 
123
                                        '<p>' . __( 'Don&#8217;t forget to click &#8220;Save Changes&#8221; when you&#8217;re done!' ) . '</p>',
 
124
                        )
 
125
                );
120
126
 
121
127
                get_current_screen()->set_help_sidebar(
122
128
                        '<p><strong>' . __( 'For more information:' ) . '</strong></p>' .
133
139
         * @return int Current step
134
140
         */
135
141
        public function step() {
136
 
                if ( ! isset( $_GET['step'] ) )
 
142
                if ( ! isset( $_GET['step'] ) ) {
137
143
                        return 1;
 
144
                }
138
145
 
139
146
                $step = (int) $_GET['step'];
140
147
                if ( $step < 1 || 3 < $step ||
141
148
                        ( 2 == $step && ! wp_verify_nonce( $_REQUEST['_wpnonce-custom-header-upload'], 'custom-header-upload' ) ) ||
142
149
                        ( 3 == $step && ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'custom-header-crop-image' ) )
143
 
                )
 
150
                ) {
144
151
                        return 1;
 
152
                }
145
153
 
146
154
                return $step;
147
155
        }
157
165
                if ( ( 1 == $step || 3 == $step ) ) {
158
166
                        wp_enqueue_media();
159
167
                        wp_enqueue_script( 'custom-header' );
160
 
                        if ( current_theme_supports( 'custom-header', 'header-text' ) )
 
168
                        if ( current_theme_supports( 'custom-header', 'header-text' ) ) {
161
169
                                wp_enqueue_script( 'wp-color-picker' );
 
170
                        }
162
171
                } elseif ( 2 == $step ) {
163
 
                        wp_enqueue_script('imgareaselect');
 
172
                        wp_enqueue_script( 'imgareaselect' );
164
173
                }
165
174
        }
166
175
 
172
181
        public function css_includes() {
173
182
                $step = $this->step();
174
183
 
175
 
                if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) )
 
184
                if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) ) {
176
185
                        wp_enqueue_style( 'wp-color-picker' );
177
 
                elseif ( 2 == $step )
178
 
                        wp_enqueue_style('imgareaselect');
 
186
                } elseif ( 2 == $step ) {
 
187
                        wp_enqueue_style( 'imgareaselect' );
 
188
                }
179
189
        }
180
190
 
181
191
        /**
184
194
         * @since 2.6.0
185
195
         */
186
196
        public function take_action() {
187
 
                if ( ! current_user_can('edit_theme_options') )
 
197
                if ( ! current_user_can( 'edit_theme_options' ) ) {
188
198
                        return;
 
199
                }
189
200
 
190
 
                if ( empty( $_POST ) )
 
201
                if ( empty( $_POST ) ) {
191
202
                        return;
 
203
                }
192
204
 
193
205
                $this->updated = true;
194
206
 
210
222
                } elseif ( isset( $_POST['text-color'] ) ) {
211
223
                        check_admin_referer( 'custom-header-options', '_wpnonce-custom-header-options' );
212
224
                        $_POST['text-color'] = str_replace( '#', '', $_POST['text-color'] );
213
 
                        $color = preg_replace('/[^0-9a-fA-F]/', '', $_POST['text-color']);
214
 
                        if ( strlen($color) == 6 || strlen($color) == 3 )
215
 
                                set_theme_mod('header_textcolor', $color);
216
 
                        elseif ( ! $color )
 
225
                        $color               = preg_replace( '/[^0-9a-fA-F]/', '', $_POST['text-color'] );
 
226
                        if ( strlen( $color ) == 6 || strlen( $color ) == 3 ) {
 
227
                                set_theme_mod( 'header_textcolor', $color );
 
228
                        } elseif ( ! $color ) {
217
229
                                set_theme_mod( 'header_textcolor', 'blank' );
 
230
                        }
218
231
                }
219
232
 
220
233
                if ( isset( $_POST['default-header'] ) ) {
234
247
        public function process_default_headers() {
235
248
                global $_wp_default_headers;
236
249
 
237
 
                if ( !isset($_wp_default_headers) )
 
250
                if ( ! isset( $_wp_default_headers ) ) {
238
251
                        return;
 
252
                }
239
253
 
240
254
                if ( ! empty( $this->default_headers ) ) {
241
255
                        return;
242
256
                }
243
257
 
244
 
                $this->default_headers = $_wp_default_headers;
245
 
                $template_directory_uri = get_template_directory_uri();
 
258
                $this->default_headers    = $_wp_default_headers;
 
259
                $template_directory_uri   = get_template_directory_uri();
246
260
                $stylesheet_directory_uri = get_stylesheet_directory_uri();
247
 
                foreach ( array_keys($this->default_headers) as $header ) {
248
 
                        $this->default_headers[$header]['url'] =  sprintf( $this->default_headers[$header]['url'], $template_directory_uri, $stylesheet_directory_uri );
249
 
                        $this->default_headers[$header]['thumbnail_url'] =  sprintf( $this->default_headers[$header]['thumbnail_url'], $template_directory_uri, $stylesheet_directory_uri );
 
261
                foreach ( array_keys( $this->default_headers ) as $header ) {
 
262
                        $this->default_headers[ $header ]['url']           = sprintf( $this->default_headers[ $header ]['url'], $template_directory_uri, $stylesheet_directory_uri );
 
263
                        $this->default_headers[ $header ]['thumbnail_url'] = sprintf( $this->default_headers[ $header ]['thumbnail_url'], $template_directory_uri, $stylesheet_directory_uri );
250
264
                }
251
265
        }
252
266
 
266
280
                        $headers = $this->default_headers;
267
281
                } else {
268
282
                        $headers = get_uploaded_header_images();
269
 
                        $type = 'uploaded';
 
283
                        $type    = 'uploaded';
270
284
                }
271
285
 
272
286
                if ( 1 < count( $headers ) ) {
280
294
                echo '<div class="available-headers">';
281
295
                foreach ( $headers as $header_key => $header ) {
282
296
                        $header_thumbnail = $header['thumbnail_url'];
283
 
                        $header_url = $header['url'];
284
 
                        $header_alt_text = empty( $header['alt_text'] ) ? '' : $header['alt_text'];
 
297
                        $header_url       = $header['url'];
 
298
                        $header_alt_text  = empty( $header['alt_text'] ) ? '' : $header['alt_text'];
285
299
                        echo '<div class="default-header">';
286
300
                        echo '<label><input name="default-header" type="radio" value="' . esc_attr( $header_key ) . '" ' . checked( $header_url, get_theme_mod( 'header_image' ), false ) . ' />';
287
301
                        $width = '';
288
 
                        if ( !empty( $header['attachment_id'] ) )
 
302
                        if ( ! empty( $header['attachment_id'] ) ) {
289
303
                                $width = ' width="230"';
290
 
                        echo '<img src="' . set_url_scheme( $header_thumbnail ) . '" alt="' . esc_attr( $header_alt_text ) .'"' . $width . ' /></label>';
 
304
                        }
 
305
                        echo '<img src="' . set_url_scheme( $header_thumbnail ) . '" alt="' . esc_attr( $header_alt_text ) . '"' . $width . ' /></label>';
291
306
                        echo '</div>';
292
307
                }
293
308
                echo '<div class="clear"></div></div>';
300
315
         */
301
316
        public function js() {
302
317
                $step = $this->step();
303
 
                if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) )
 
318
                if ( ( 1 == $step || 3 == $step ) && current_theme_supports( 'custom-header', 'header-text' ) ) {
304
319
                        $this->js_1();
305
 
                elseif ( 2 == $step )
 
320
                } elseif ( 2 == $step ) {
306
321
                        $this->js_2();
 
322
                }
307
323
        }
308
324
 
309
325
        /**
364
380
        });
365
381
})(jQuery);
366
382
</script>
367
 
<?php
 
383
                <?php
368
384
        }
369
385
 
370
386
        /**
372
388
         *
373
389
         * @since 2.6.0
374
390
         */
375
 
        public function js_2() { ?>
 
391
        public function js_2() {
 
392
 
 
393
                ?>
376
394
<script type="text/javascript">
377
395
        function onEndCrop( coords ) {
378
396
                jQuery( '#x1' ).val(coords.x);
408
426
                        y2: yinit,
409
427
                        <?php
410
428
                        if ( ! current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' ) ) {
411
 
                        ?>
 
429
                                ?>
412
430
                        aspectRatio: xinit + ':' + yinit,
413
 
                        <?php
 
431
                                <?php
414
432
                        }
415
433
                        if ( ! current_theme_supports( 'custom-header', 'flex-height' ) ) {
416
 
                        ?>
 
434
                                ?>
417
435
                        maxHeight: <?php echo get_theme_support( 'custom-header', 'height' ); ?>,
418
 
                        <?php
 
436
                                <?php
419
437
                        }
420
438
                        if ( ! current_theme_supports( 'custom-header', 'flex-width' ) ) {
421
 
                        ?>
 
439
                                ?>
422
440
                        maxWidth: <?php echo get_theme_support( 'custom-header', 'width' ); ?>,
423
 
                        <?php
 
441
                                <?php
424
442
                        }
425
443
                        ?>
426
444
                        onInit: function () {
436
454
                });
437
455
        });
438
456
</script>
439
 
<?php
 
457
                <?php
440
458
        }
441
459
 
442
460
        /**
446
464
         */
447
465
        public function step_1() {
448
466
                $this->process_default_headers();
449
 
?>
 
467
                ?>
450
468
 
451
469
<div class="wrap">
452
470
<h1><?php _e( 'Custom Header' ); ?></h1>
453
471
 
454
 
<?php if ( current_user_can( 'customize' ) ) { ?>
 
472
                <?php if ( current_user_can( 'customize' ) ) { ?>
455
473
<div class="notice notice-info hide-if-no-customize">
456
474
        <p>
457
 
                <?php
458
 
                printf(
459
 
                        __( 'You can now manage and live-preview Custom Header in the <a href="%1$s">Customizer</a>.' ),
460
 
                        admin_url( 'customize.php?autofocus[control]=header_image' )
461
 
                );
462
 
                ?>
 
475
                        <?php
 
476
                                printf(
 
477
                                        __( 'You can now manage and live-preview Custom Header in the <a href="%1$s">Customizer</a>.' ),
 
478
                                        admin_url( 'customize.php?autofocus[control]=header_image' )
 
479
                                );
 
480
                        ?>
463
481
        </p>
464
482
</div>
465
 
<?php } ?>
 
483
                <?php } ?>
466
484
 
467
 
<?php if ( ! empty( $this->updated ) ) { ?>
 
485
                <?php if ( ! empty( $this->updated ) ) { ?>
468
486
<div id="message" class="updated">
469
487
<p><?php printf( __( 'Header updated. <a href="%s">Visit your site</a> to see how it looks.' ), home_url( '/' ) ); ?></p>
470
488
</div>
471
 
<?php } ?>
 
489
                <?php } ?>
472
490
 
473
491
<h3><?php _e( 'Header Image' ); ?></h3>
474
492
 
475
493
<table class="form-table">
476
494
<tbody>
477
495
 
478
 
<?php if ( get_custom_header() || display_header_text() ) : ?>
 
496
                <?php if ( get_custom_header() || display_header_text() ) : ?>
479
497
<tr>
480
498
<th scope="row"><?php _e( 'Preview' ); ?></th>
481
499
<td>
482
 
        <?php
483
 
        if ( $this->admin_image_div_callback ) {
484
 
                call_user_func( $this->admin_image_div_callback );
485
 
        } else {
486
 
                $custom_header = get_custom_header();
487
 
                $header_image = get_header_image();
488
 
 
489
 
                if ( $header_image ) {
490
 
                        $header_image_style = 'background-image:url(' . esc_url( $header_image ) . ');';
491
 
                }  else {
492
 
                        $header_image_style = '';
493
 
                }
494
 
 
495
 
                if ( $custom_header->width )
496
 
                        $header_image_style .= 'max-width:' . $custom_header->width . 'px;';
497
 
                if ( $custom_header->height )
498
 
                        $header_image_style .= 'height:' . $custom_header->height . 'px;';
499
 
        ?>
 
500
                        <?php
 
501
                        if ( $this->admin_image_div_callback ) {
 
502
                                call_user_func( $this->admin_image_div_callback );
 
503
                        } else {
 
504
                                $custom_header = get_custom_header();
 
505
                                $header_image  = get_header_image();
 
506
 
 
507
                                if ( $header_image ) {
 
508
                                        $header_image_style = 'background-image:url(' . esc_url( $header_image ) . ');';
 
509
                                } else {
 
510
                                        $header_image_style = '';
 
511
                                }
 
512
 
 
513
                                if ( $custom_header->width ) {
 
514
                                        $header_image_style .= 'max-width:' . $custom_header->width . 'px;';
 
515
                                }
 
516
                                if ( $custom_header->height ) {
 
517
                                        $header_image_style .= 'height:' . $custom_header->height . 'px;';
 
518
                                }
 
519
                                ?>
500
520
        <div id="headimg" style="<?php echo $header_image_style; ?>">
501
 
                <?php
502
 
                if ( display_header_text() )
503
 
                        $style = ' style="color:#' . get_header_textcolor() . ';"';
504
 
                else
505
 
                        $style = ' style="display:none;"';
506
 
                ?>
507
 
                <h1><a id="name" class="displaying-header-text" <?php echo $style; ?> onclick="return false;" href="<?php bloginfo('url'); ?>" tabindex="-1"><?php bloginfo( 'name' ); ?></a></h1>
 
521
                                <?php
 
522
                                if ( display_header_text() ) {
 
523
                                        $style = ' style="color:#' . get_header_textcolor() . ';"';
 
524
                                } else {
 
525
                                        $style = ' style="display:none;"';
 
526
                                }
 
527
                                ?>
 
528
                <h1><a id="name" class="displaying-header-text" <?php echo $style; ?> onclick="return false;" href="<?php bloginfo( 'url' ); ?>" tabindex="-1"><?php bloginfo( 'name' ); ?></a></h1>
508
529
                <div id="desc" class="displaying-header-text" <?php echo $style; ?>><?php bloginfo( 'description' ); ?></div>
509
530
        </div>
510
 
        <?php } ?>
 
531
                        <?php } ?>
511
532
</td>
512
533
</tr>
513
 
<?php endif; ?>
 
534
                <?php endif; ?>
514
535
 
515
 
<?php if ( current_user_can( 'upload_files' ) && current_theme_supports( 'custom-header', 'uploads' ) ) : ?>
 
536
                <?php if ( current_user_can( 'upload_files' ) && current_theme_supports( 'custom-header', 'uploads' ) ) : ?>
516
537
<tr>
517
538
<th scope="row"><?php _e( 'Select Image' ); ?></th>
518
539
<td>
519
540
        <p><?php _e( 'You can select an image to be shown at the top of your site by uploading from your computer or choosing from your media library. After selecting an image you will be able to crop it.' ); ?><br />
520
 
        <?php
521
 
        if ( ! current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' ) ) {
522
 
                printf( __( 'Images of exactly <strong>%1$d &times; %2$d pixels</strong> will be used as-is.' ) . '<br />', get_theme_support( 'custom-header', 'width' ), get_theme_support( 'custom-header', 'height' ) );
523
 
        } elseif ( current_theme_supports( 'custom-header', 'flex-height' ) ) {
524
 
                if ( ! current_theme_supports( 'custom-header', 'flex-width' ) )
525
 
                        printf(
526
 
                                /* translators: %s: size in pixels */
527
 
                                __( 'Images should be at least %s wide.' ) . ' ',
528
 
                                sprintf(
529
 
                                        /* translators: %d: custom header width */
530
 
                                        '<strong>' . __( '%d pixels' ) . '</strong>',
531
 
                                        get_theme_support( 'custom-header', 'width' )
532
 
                                )
533
 
                        );
534
 
        } elseif ( current_theme_supports( 'custom-header', 'flex-width' ) ) {
535
 
                if ( ! current_theme_supports( 'custom-header', 'flex-height' ) )
536
 
                        printf(
537
 
                                /* translators: %s: size in pixels */
538
 
                                __( 'Images should be at least %s tall.' ) . ' ',
539
 
                                sprintf(
540
 
                                        /* translators: %d: custom header height */
541
 
                                        '<strong>' . __( '%d pixels' ) . '</strong>',
542
 
                                        get_theme_support( 'custom-header', 'height' )
543
 
                                )
544
 
                        );
545
 
        }
546
 
        if ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) {
547
 
                if ( current_theme_supports( 'custom-header', 'width' ) )
548
 
                        printf(
549
 
                                /* translators: %s: size in pixels */
550
 
                                __( 'Suggested width is %s.' ) . ' ',
551
 
                                sprintf(
552
 
                                        /* translators: %d: custom header width */
553
 
                                        '<strong>' . __( '%d pixels' ) . '</strong>',
554
 
                                        get_theme_support( 'custom-header', 'width' )
555
 
                                )
556
 
                        );
557
 
                if ( current_theme_supports( 'custom-header', 'height' ) )
558
 
                        printf(
559
 
                                /* translators: %s: size in pixels */
560
 
                                __( 'Suggested height is %s.' ) . ' ',
561
 
                                sprintf(
562
 
                                        /* translators: %d: custom header height */
563
 
                                        '<strong>' . __( '%d pixels' ) . '</strong>',
564
 
                                        get_theme_support( 'custom-header', 'height' )
565
 
                                )
566
 
                        );
567
 
        }
568
 
        ?></p>
569
 
        <form enctype="multipart/form-data" id="upload-form" class="wp-upload-form" method="post" action="<?php echo esc_url( add_query_arg( 'step', 2 ) ) ?>">
 
541
                        <?php
 
542
                        if ( ! current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' ) ) {
 
543
                                printf( __( 'Images of exactly <strong>%1$d &times; %2$d pixels</strong> will be used as-is.' ) . '<br />', get_theme_support( 'custom-header', 'width' ), get_theme_support( 'custom-header', 'height' ) );
 
544
                        } elseif ( current_theme_supports( 'custom-header', 'flex-height' ) ) {
 
545
                                if ( ! current_theme_supports( 'custom-header', 'flex-width' ) ) {
 
546
                                        printf(
 
547
                                                /* translators: %s: size in pixels */
 
548
                                                __( 'Images should be at least %s wide.' ) . ' ',
 
549
                                                sprintf(
 
550
                                                        /* translators: %d: custom header width */
 
551
                                                        '<strong>' . __( '%d pixels' ) . '</strong>',
 
552
                                                        get_theme_support( 'custom-header', 'width' )
 
553
                                                )
 
554
                                        );
 
555
                                }
 
556
                        } elseif ( current_theme_supports( 'custom-header', 'flex-width' ) ) {
 
557
                                if ( ! current_theme_supports( 'custom-header', 'flex-height' ) ) {
 
558
                                        printf(
 
559
                                                /* translators: %s: size in pixels */
 
560
                                                __( 'Images should be at least %s tall.' ) . ' ',
 
561
                                                sprintf(
 
562
                                                        /* translators: %d: custom header height */
 
563
                                                        '<strong>' . __( '%d pixels' ) . '</strong>',
 
564
                                                        get_theme_support( 'custom-header', 'height' )
 
565
                                                )
 
566
                                        );
 
567
                                }
 
568
                        }
 
569
                        if ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) {
 
570
                                if ( current_theme_supports( 'custom-header', 'width' ) ) {
 
571
                                        printf(
 
572
                                                /* translators: %s: size in pixels */
 
573
                                                __( 'Suggested width is %s.' ) . ' ',
 
574
                                                sprintf(
 
575
                                                        /* translators: %d: custom header width */
 
576
                                                        '<strong>' . __( '%d pixels' ) . '</strong>',
 
577
                                                        get_theme_support( 'custom-header', 'width' )
 
578
                                                )
 
579
                                        );
 
580
                                }
 
581
                                if ( current_theme_supports( 'custom-header', 'height' ) ) {
 
582
                                        printf(
 
583
                                                /* translators: %s: size in pixels */
 
584
                                                __( 'Suggested height is %s.' ) . ' ',
 
585
                                                sprintf(
 
586
                                                        /* translators: %d: custom header height */
 
587
                                                        '<strong>' . __( '%d pixels' ) . '</strong>',
 
588
                                                        get_theme_support( 'custom-header', 'height' )
 
589
                                                )
 
590
                                        );
 
591
                                }
 
592
                        }
 
593
                        ?>
 
594
        </p>
 
595
        <form enctype="multipart/form-data" id="upload-form" class="wp-upload-form" method="post" action="<?php echo esc_url( add_query_arg( 'step', 2 ) ); ?>">
570
596
        <p>
571
597
                <label for="upload"><?php _e( 'Choose an image from your computer:' ); ?></label><br />
572
598
                <input type="file" id="upload" name="import" />
573
599
                <input type="hidden" name="action" value="save" />
574
 
                <?php wp_nonce_field( 'custom-header-upload', '_wpnonce-custom-header-upload' ); ?>
575
 
                <?php submit_button( __( 'Upload' ), '', 'submit', false ); ?>
 
600
                        <?php wp_nonce_field( 'custom-header-upload', '_wpnonce-custom-header-upload' ); ?>
 
601
                        <?php submit_button( __( 'Upload' ), '', 'submit', false ); ?>
576
602
        </p>
577
 
        <?php
578
 
                $modal_update_href = esc_url( add_query_arg( array(
579
 
                        'page' => 'custom-header',
580
 
                        'step' => 2,
581
 
                        '_wpnonce-custom-header-upload' => wp_create_nonce('custom-header-upload'),
582
 
                ), admin_url('themes.php') ) );
583
 
        ?>
 
603
                        <?php
 
604
                                $modal_update_href = esc_url(
 
605
                                        add_query_arg(
 
606
                                                array(
 
607
                                                        'page' => 'custom-header',
 
608
                                                        'step' => 2,
 
609
                                                        '_wpnonce-custom-header-upload' => wp_create_nonce( 'custom-header-upload' ),
 
610
                                                ),
 
611
                                                admin_url( 'themes.php' )
 
612
                                        )
 
613
                                );
 
614
                        ?>
584
615
        <p>
585
616
                <label for="choose-from-library-link"><?php _e( 'Or choose an image from your media library:' ); ?></label><br />
586
617
                <button id="choose-from-library-link" class="button"
591
622
        </form>
592
623
</td>
593
624
</tr>
594
 
<?php endif; ?>
 
625
                <?php endif; ?>
595
626
</tbody>
596
627
</table>
597
628
 
598
 
<form method="post" action="<?php echo esc_url( add_query_arg( 'step', 1 ) ) ?>">
599
 
<?php submit_button( null, 'screen-reader-text', 'save-header-options', false ); ?>
 
629
<form method="post" action="<?php echo esc_url( add_query_arg( 'step', 1 ) ); ?>">
 
630
                <?php submit_button( null, 'screen-reader-text', 'save-header-options', false ); ?>
600
631
<table class="form-table">
601
632
<tbody>
602
 
        <?php if ( get_uploaded_header_images() ) : ?>
 
633
                <?php if ( get_uploaded_header_images() ) : ?>
603
634
<tr>
604
635
<th scope="row"><?php _e( 'Uploaded Images' ); ?></th>
605
636
<td>
606
 
        <p><?php _e( 'You can choose one of your previously uploaded headers, or show a random one.' ) ?></p>
607
 
        <?php
608
 
                $this->show_header_selector( 'uploaded' );
609
 
        ?>
 
637
        <p><?php _e( 'You can choose one of your previously uploaded headers, or show a random one.' ); ?></p>
 
638
                        <?php
 
639
                        $this->show_header_selector( 'uploaded' );
 
640
                        ?>
610
641
</td>
611
642
</tr>
612
 
        <?php endif;
613
 
        if ( ! empty( $this->default_headers ) ) : ?>
 
643
                        <?php
 
644
        endif;
 
645
                if ( ! empty( $this->default_headers ) ) :
 
646
                        ?>
614
647
<tr>
615
648
<th scope="row"><?php _e( 'Default Images' ); ?></th>
616
649
<td>
617
 
<?php if ( current_theme_supports( 'custom-header', 'uploads' ) ) : ?>
618
 
        <p><?php _e( 'If you don&lsquo;t want to upload your own image, you can use one of these cool headers, or show a random one.' ) ?></p>
619
 
<?php else: ?>
620
 
        <p><?php _e( 'You can use one of these cool headers or show a random one on each page.' ) ?></p>
621
 
<?php endif; ?>
622
 
        <?php
623
 
                $this->show_header_selector( 'default' );
624
 
        ?>
 
650
                        <?php if ( current_theme_supports( 'custom-header', 'uploads' ) ) : ?>
 
651
        <p><?php _e( 'If you don&lsquo;t want to upload your own image, you can use one of these cool headers, or show a random one.' ); ?></p>
 
652
        <?php else : ?>
 
653
        <p><?php _e( 'You can use one of these cool headers or show a random one on each page.' ); ?></p>
 
654
        <?php endif; ?>
 
655
                        <?php
 
656
                        $this->show_header_selector( 'default' );
 
657
                        ?>
625
658
</td>
626
659
</tr>
627
 
        <?php endif;
628
 
        if ( get_header_image() ) : ?>
 
660
                        <?php
 
661
        endif;
 
662
                if ( get_header_image() ) :
 
663
                        ?>
629
664
<tr>
630
665
<th scope="row"><?php _e( 'Remove Image' ); ?></th>
631
666
<td>
632
 
        <p><?php _e( 'This will remove the header image. You will not be able to restore any customizations.' ) ?></p>
633
 
        <?php submit_button( __( 'Remove Header Image' ), '', 'removeheader', false ); ?>
 
667
        <p><?php _e( 'This will remove the header image. You will not be able to restore any customizations.' ); ?></p>
 
668
                        <?php submit_button( __( 'Remove Header Image' ), '', 'removeheader', false ); ?>
634
669
</td>
635
670
</tr>
636
 
        <?php endif;
 
671
                        <?php
 
672
        endif;
637
673
 
638
 
        $default_image = sprintf( get_theme_support( 'custom-header', 'default-image' ), get_template_directory_uri(), get_stylesheet_directory_uri() );
639
 
        if ( $default_image && get_header_image() != $default_image ) : ?>
 
674
                $default_image = sprintf( get_theme_support( 'custom-header', 'default-image' ), get_template_directory_uri(), get_stylesheet_directory_uri() );
 
675
                if ( $default_image && get_header_image() != $default_image ) :
 
676
                        ?>
640
677
<tr>
641
678
<th scope="row"><?php _e( 'Reset Image' ); ?></th>
642
679
<td>
643
 
        <p><?php _e( 'This will restore the original header image. You will not be able to restore any customizations.' ) ?></p>
644
 
        <?php submit_button( __( 'Restore Original Header Image' ), '', 'resetheader', false ); ?>
 
680
        <p><?php _e( 'This will restore the original header image. You will not be able to restore any customizations.' ); ?></p>
 
681
                        <?php submit_button( __( 'Restore Original Header Image' ), '', 'resetheader', false ); ?>
645
682
</td>
646
683
</tr>
647
684
        <?php endif; ?>
648
685
</tbody>
649
686
</table>
650
687
 
651
 
<?php if ( current_theme_supports( 'custom-header', 'header-text' ) ) : ?>
 
688
                <?php if ( current_theme_supports( 'custom-header', 'header-text' ) ) : ?>
652
689
 
653
690
<h3><?php _e( 'Header Text' ); ?></h3>
654
691
 
667
704
<th scope="row"><?php _e( 'Text Color' ); ?></th>
668
705
<td>
669
706
        <p>
670
 
        <?php
671
 
        $default_color = '';
672
 
        if ( current_theme_supports( 'custom-header', 'default-text-color' ) ) {
673
 
                $default_color = get_theme_support( 'custom-header', 'default-text-color' );
674
 
                if ( $default_color && false === strpos( $default_color, '#' ) ) {
675
 
                        $default_color = '#' . $default_color;
676
 
                }
677
 
        }
678
 
 
679
 
        $default_color_attr = $default_color ? ' data-default-color="' . esc_attr( $default_color ) . '"' : '';
680
 
 
681
 
        $header_textcolor = display_header_text() ? get_header_textcolor() : get_theme_support( 'custom-header', 'default-text-color' );
682
 
        if ( $header_textcolor && false === strpos( $header_textcolor, '#' ) ) {
683
 
                $header_textcolor = '#' . $header_textcolor;
684
 
        }
685
 
 
686
 
        echo '<input type="text" name="text-color" id="text-color" value="' . esc_attr( $header_textcolor ) . '"' . $default_color_attr . ' />';
687
 
        if ( $default_color ) {
688
 
                echo ' <span class="description hide-if-js">' . sprintf( _x( 'Default: %s', 'color' ), esc_html( $default_color ) ) . '</span>';
689
 
        }
690
 
        ?>
 
707
                        <?php
 
708
                        $default_color = '';
 
709
                        if ( current_theme_supports( 'custom-header', 'default-text-color' ) ) {
 
710
                                $default_color = get_theme_support( 'custom-header', 'default-text-color' );
 
711
                                if ( $default_color && false === strpos( $default_color, '#' ) ) {
 
712
                                        $default_color = '#' . $default_color;
 
713
                                }
 
714
                        }
 
715
 
 
716
                        $default_color_attr = $default_color ? ' data-default-color="' . esc_attr( $default_color ) . '"' : '';
 
717
 
 
718
                        $header_textcolor = display_header_text() ? get_header_textcolor() : get_theme_support( 'custom-header', 'default-text-color' );
 
719
                        if ( $header_textcolor && false === strpos( $header_textcolor, '#' ) ) {
 
720
                                $header_textcolor = '#' . $header_textcolor;
 
721
                        }
 
722
 
 
723
                        echo '<input type="text" name="text-color" id="text-color" value="' . esc_attr( $header_textcolor ) . '"' . $default_color_attr . ' />';
 
724
                        if ( $default_color ) {
 
725
                                echo ' <span class="description hide-if-js">' . sprintf( _x( 'Default: %s', 'color' ), esc_html( $default_color ) ) . '</span>';
 
726
                        }
 
727
                        ?>
691
728
        </p>
692
729
</td>
693
730
</tr>
694
731
</tbody>
695
732
</table>
696
 
<?php endif;
697
 
 
698
 
/**
699
 
 * Fires just before the submit button in the custom header options form.
700
 
 *
701
 
 * @since 3.1.0
702
 
 */
703
 
do_action( 'custom_header_options' );
704
 
 
705
 
wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
706
 
 
707
 
<?php submit_button( null, 'primary', 'save-header-options' ); ?>
 
733
                        <?php
 
734
endif;
 
735
 
 
736
                /**
 
737
                 * Fires just before the submit button in the custom header options form.
 
738
                 *
 
739
                 * @since 3.1.0
 
740
                 */
 
741
                do_action( 'custom_header_options' );
 
742
 
 
743
                wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' );
 
744
                ?>
 
745
 
 
746
                <?php submit_button( null, 'primary', 'save-header-options' ); ?>
708
747
</form>
709
748
</div>
710
749
 
711
 
<?php }
 
750
                <?php
 
751
        }
712
752
 
713
753
        /**
714
754
         * Display second step of custom header image page.
716
756
         * @since 2.1.0
717
757
         */
718
758
        public function step_2() {
719
 
                check_admin_referer('custom-header-upload', '_wpnonce-custom-header-upload');
 
759
                check_admin_referer( 'custom-header-upload', '_wpnonce-custom-header-upload' );
720
760
                if ( ! current_theme_supports( 'custom-header', 'uploads' ) ) {
721
761
                        wp_die(
722
762
                                '<h1>' . __( 'Something went wrong.' ) . '</h1>' .
727
767
 
728
768
                if ( empty( $_POST ) && isset( $_GET['file'] ) ) {
729
769
                        $attachment_id = absint( $_GET['file'] );
730
 
                        $file = get_attached_file( $attachment_id, true );
731
 
                        $url = wp_get_attachment_image_src( $attachment_id, 'full' );
732
 
                        $url = $url[0];
 
770
                        $file          = get_attached_file( $attachment_id, true );
 
771
                        $url           = wp_get_attachment_image_src( $attachment_id, 'full' );
 
772
                        $url           = $url[0];
733
773
                } elseif ( isset( $_POST ) ) {
734
 
                        $data = $this->step_2_manage_upload();
 
774
                        $data          = $this->step_2_manage_upload();
735
775
                        $attachment_id = $data['attachment_id'];
736
 
                        $file = $data['file'];
737
 
                        $url = $data['url'];
 
776
                        $file          = $data['file'];
 
777
                        $url           = $data['url'];
738
778
                }
739
779
 
740
780
                if ( file_exists( $file ) ) {
741
781
                        list( $width, $height, $type, $attr ) = getimagesize( $file );
742
782
                } else {
743
 
                        $data = wp_get_attachment_metadata( $attachment_id );
744
 
                        $height = isset( $data[ 'height' ] ) ? $data[ 'height' ] : 0;
745
 
                        $width = isset( $data[ 'width' ] ) ? $data[ 'width' ] : 0;
 
783
                        $data   = wp_get_attachment_metadata( $attachment_id );
 
784
                        $height = isset( $data['height'] ) ? $data['height'] : 0;
 
785
                        $width  = isset( $data['width'] ) ? $data['width'] : 0;
746
786
                        unset( $data );
747
787
                }
748
788
 
749
789
                $max_width = 0;
750
790
                // For flex, limit size of image displayed to 1500px unless theme says otherwise
751
 
                if ( current_theme_supports( 'custom-header', 'flex-width' ) )
 
791
                if ( current_theme_supports( 'custom-header', 'flex-width' ) ) {
752
792
                        $max_width = 1500;
 
793
                }
753
794
 
754
 
                if ( current_theme_supports( 'custom-header', 'max-width' ) )
 
795
                if ( current_theme_supports( 'custom-header', 'max-width' ) ) {
755
796
                        $max_width = max( $max_width, get_theme_support( 'custom-header', 'max-width' ) );
 
797
                }
756
798
                $max_width = max( $max_width, get_theme_support( 'custom-header', 'width' ) );
757
799
 
758
800
                // If flexible height isn't supported and the image is the exact right size
759
801
                if ( ! current_theme_supports( 'custom-header', 'flex-height' ) && ! current_theme_supports( 'custom-header', 'flex-width' )
760
 
                        && $width == get_theme_support( 'custom-header', 'width' ) && $height == get_theme_support( 'custom-header', 'height' ) )
761
 
                {
 
802
                        && $width == get_theme_support( 'custom-header', 'width' ) && $height == get_theme_support( 'custom-header', 'height' ) ) {
762
803
                        // Add the meta-data
763
 
                        if ( file_exists( $file ) )
 
804
                        if ( file_exists( $file ) ) {
764
805
                                wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $file ) );
 
806
                        }
765
807
 
766
808
                        $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) );
767
809
 
778
820
                        return $this->finished();
779
821
                } elseif ( $width > $max_width ) {
780
822
                        $oitar = $width / $max_width;
781
 
                        $image = wp_crop_image($attachment_id, 0, 0, $width, $height, $max_width, $height / $oitar, false, str_replace(basename($file), 'midsize-'.basename($file), $file));
782
 
                        if ( ! $image || is_wp_error( $image ) )
 
823
                        $image = wp_crop_image( $attachment_id, 0, 0, $width, $height, $max_width, $height / $oitar, false, str_replace( basename( $file ), 'midsize-' . basename( $file ), $file ) );
 
824
                        if ( ! $image || is_wp_error( $image ) ) {
783
825
                                wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) );
 
826
                        }
784
827
 
785
828
                        /** This filter is documented in wp-admin/custom-header.php */
786
829
                        $image = apply_filters( 'wp_create_file_in_uploads', $image, $attachment_id ); // For replication
787
830
 
788
 
                        $url = str_replace(basename($url), basename($image), $url);
789
 
                        $width = $width / $oitar;
 
831
                        $url    = str_replace( basename( $url ), basename( $image ), $url );
 
832
                        $width  = $width / $oitar;
790
833
                        $height = $height / $oitar;
791
834
                } else {
792
835
                        $oitar = 1;
796
839
<div class="wrap">
797
840
<h1><?php _e( 'Crop Header Image' ); ?></h1>
798
841
 
799
 
<form method="post" action="<?php echo esc_url(add_query_arg('step', 3)); ?>">
800
 
        <p class="hide-if-no-js"><?php _e('Choose the part of the image you want to use as your header.'); ?></p>
801
 
        <p class="hide-if-js"><strong><?php _e( 'You need JavaScript to choose a part of the image.'); ?></strong></p>
 
842
<form method="post" action="<?php echo esc_url( add_query_arg( 'step', 3 ) ); ?>">
 
843
        <p class="hide-if-no-js"><?php _e( 'Choose the part of the image you want to use as your header.' ); ?></p>
 
844
        <p class="hide-if-js"><strong><?php _e( 'You need JavaScript to choose a part of the image.' ); ?></strong></p>
802
845
 
803
846
        <div id="crop_image" style="position: relative">
804
847
                <img src="<?php echo esc_url( $url ); ?>" id="upload" width="<?php echo $width; ?>" height="<?php echo $height; ?>" alt="" />
810
853
        <input type="hidden" name="height" id="height" value="<?php echo esc_attr( $height ); ?>"/>
811
854
        <input type="hidden" name="attachment_id" id="attachment_id" value="<?php echo esc_attr( $attachment_id ); ?>" />
812
855
        <input type="hidden" name="oitar" id="oitar" value="<?php echo esc_attr( $oitar ); ?>" />
813
 
        <?php if ( empty( $_POST ) && isset( $_GET['file'] ) ) { ?>
 
856
                <?php if ( empty( $_POST ) && isset( $_GET['file'] ) ) { ?>
814
857
        <input type="hidden" name="create-new-attachment" value="true" />
815
858
        <?php } ?>
816
 
        <?php wp_nonce_field( 'custom-header-crop-image' ) ?>
 
859
                <?php wp_nonce_field( 'custom-header-crop-image' ); ?>
817
860
 
818
861
        <p class="submit">
819
 
        <?php submit_button( __( 'Crop and Publish' ), 'primary', 'submit', false ); ?>
820
 
        <?php
821
 
        if ( isset( $oitar ) && 1 == $oitar && ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) )
822
 
                submit_button( __( 'Skip Cropping, Publish Image as Is' ), '', 'skip-cropping', false );
823
 
        ?>
 
862
                <?php submit_button( __( 'Crop and Publish' ), 'primary', 'submit', false ); ?>
 
863
                <?php
 
864
                if ( isset( $oitar ) && 1 == $oitar && ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) ) {
 
865
                        submit_button( __( 'Skip Cropping, Publish Image as Is' ), '', 'skip-cropping', false );
 
866
                }
 
867
                ?>
824
868
        </p>
825
869
</form>
826
870
</div>
834
878
         * @since 3.4.0
835
879
         */
836
880
        public function step_2_manage_upload() {
837
 
                $overrides = array('test_form' => false);
 
881
                $overrides = array( 'test_form' => false );
838
882
 
839
883
                $uploaded_file = $_FILES['import'];
840
 
                $wp_filetype = wp_check_filetype_and_ext( $uploaded_file['tmp_name'], $uploaded_file['name'] );
841
 
                if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) )
 
884
                $wp_filetype   = wp_check_filetype_and_ext( $uploaded_file['tmp_name'], $uploaded_file['name'] );
 
885
                if ( ! wp_match_mime_types( 'image', $wp_filetype['type'] ) ) {
842
886
                        wp_die( __( 'The uploaded file is not a valid image. Please try again.' ) );
843
 
 
844
 
                $file = wp_handle_upload($uploaded_file, $overrides);
845
 
 
846
 
                if ( isset($file['error']) )
847
 
                        wp_die( $file['error'],  __( 'Image Upload Error' ) );
848
 
 
849
 
                $url = $file['url'];
850
 
                $type = $file['type'];
851
 
                $file = $file['file'];
852
 
                $filename = basename($file);
 
887
                }
 
888
 
 
889
                $file = wp_handle_upload( $uploaded_file, $overrides );
 
890
 
 
891
                if ( isset( $file['error'] ) ) {
 
892
                        wp_die( $file['error'], __( 'Image Upload Error' ) );
 
893
                }
 
894
 
 
895
                $url      = $file['url'];
 
896
                $type     = $file['type'];
 
897
                $file     = $file['file'];
 
898
                $filename = basename( $file );
853
899
 
854
900
                // Construct the object array
855
901
                $object = array(
857
903
                        'post_content'   => $url,
858
904
                        'post_mime_type' => $type,
859
905
                        'guid'           => $url,
860
 
                        'context'        => 'custom-header'
 
906
                        'context'        => 'custom-header',
861
907
                );
862
908
 
863
909
                // Save the data
892
938
                }
893
939
 
894
940
                if ( $_POST['oitar'] > 1 ) {
895
 
                        $_POST['x1'] = $_POST['x1'] * $_POST['oitar'];
896
 
                        $_POST['y1'] = $_POST['y1'] * $_POST['oitar'];
897
 
                        $_POST['width'] = $_POST['width'] * $_POST['oitar'];
 
941
                        $_POST['x1']     = $_POST['x1'] * $_POST['oitar'];
 
942
                        $_POST['y1']     = $_POST['y1'] * $_POST['oitar'];
 
943
                        $_POST['width']  = $_POST['width'] * $_POST['oitar'];
898
944
                        $_POST['height'] = $_POST['height'] * $_POST['oitar'];
899
945
                }
900
946
 
901
947
                $attachment_id = absint( $_POST['attachment_id'] );
902
 
                $original = get_attached_file($attachment_id);
903
 
 
904
 
                $dimensions = $this->get_header_dimensions( array(
905
 
                        'height' => $_POST['height'],
906
 
                        'width'  => $_POST['width'],
907
 
                ) );
908
 
                $height = $dimensions['dst_height'];
909
 
                $width = $dimensions['dst_width'];
910
 
 
911
 
                if ( empty( $_POST['skip-cropping'] ) )
 
948
                $original      = get_attached_file( $attachment_id );
 
949
 
 
950
                $dimensions = $this->get_header_dimensions(
 
951
                        array(
 
952
                                'height' => $_POST['height'],
 
953
                                'width'  => $_POST['width'],
 
954
                        )
 
955
                );
 
956
                $height     = $dimensions['dst_height'];
 
957
                $width      = $dimensions['dst_width'];
 
958
 
 
959
                if ( empty( $_POST['skip-cropping'] ) ) {
912
960
                        $cropped = wp_crop_image( $attachment_id, (int) $_POST['x1'], (int) $_POST['y1'], (int) $_POST['width'], (int) $_POST['height'], $width, $height );
913
 
                elseif ( ! empty( $_POST['create-new-attachment'] ) )
 
961
                } elseif ( ! empty( $_POST['create-new-attachment'] ) ) {
914
962
                        $cropped = _copy_image_file( $attachment_id );
915
 
                else
 
963
                } else {
916
964
                        $cropped = get_attached_file( $attachment_id );
 
965
                }
917
966
 
918
 
                if ( ! $cropped || is_wp_error( $cropped ) )
 
967
                if ( ! $cropped || is_wp_error( $cropped ) ) {
919
968
                        wp_die( __( 'Image could not be processed. Please go back and try again.' ), __( 'Image Processing Error' ) );
 
969
                }
920
970
 
921
971
                /** This filter is documented in wp-admin/custom-header.php */
922
972
                $cropped = apply_filters( 'wp_create_file_in_uploads', $cropped, $attachment_id ); // For replication
923
973
 
924
974
                $object = $this->create_attachment_object( $cropped, $attachment_id );
925
975
 
926
 
                if ( ! empty( $_POST['create-new-attachment'] ) )
 
976
                if ( ! empty( $_POST['create-new-attachment'] ) ) {
927
977
                        unset( $object['ID'] );
 
978
                }
928
979
 
929
980
                // Update the attachment
930
981
                $attachment_id = $this->insert_attachment( $object, $cropped );
961
1012
         * @since 2.1.0
962
1013
         */
963
1014
        public function admin_page() {
964
 
                if ( ! current_user_can('edit_theme_options') )
965
 
                        wp_die(__('Sorry, you are not allowed to customize headers.'));
 
1015
                if ( ! current_user_can( 'edit_theme_options' ) ) {
 
1016
                        wp_die( __( 'Sorry, you are not allowed to customize headers.' ) );
 
1017
                }
966
1018
                $step = $this->step();
967
 
                if ( 2 == $step )
 
1019
                if ( 2 == $step ) {
968
1020
                        $this->step_2();
969
 
                elseif ( 3 == $step )
 
1021
                } elseif ( 3 == $step ) {
970
1022
                        $this->step_3();
971
 
                else
 
1023
                } else {
972
1024
                        $this->step_1();
 
1025
                }
973
1026
        }
974
1027
 
975
1028
        /**
1003
1056
         * @since 3.4.0
1004
1057
         *
1005
1058
         * @param mixed $choice Which header image to select. Allows for values of 'random-default-image',
1006
 
         *      for randomly cycling among the default images; 'random-uploaded-image', for randomly cycling
1007
 
         *      among the uploaded images; the key of a default image registered for that theme; and
1008
 
         *      the key of an image uploaded for that theme (the attachment ID of the image).
 
1059
         *  for randomly cycling among the default images; 'random-uploaded-image', for randomly cycling
 
1060
         *  among the uploaded images; the key of a default image registered for that theme; and
 
1061
         *  the key of an image uploaded for that theme (the attachment ID of the image).
1009
1062
         *  Or an array of arguments: attachment_id, url, width, height. All are required.
1010
1063
         */
1011
1064
        final public function set_header_image( $choice ) {
1012
1065
                if ( is_array( $choice ) || is_object( $choice ) ) {
1013
1066
                        $choice = (array) $choice;
1014
 
                        if ( ! isset( $choice['attachment_id'] ) || ! isset( $choice['url'] ) )
 
1067
                        if ( ! isset( $choice['attachment_id'] ) || ! isset( $choice['url'] ) ) {
1015
1068
                                return;
 
1069
                        }
1016
1070
 
1017
1071
                        $choice['url'] = esc_url_raw( $choice['url'] );
1018
1072
 
1042
1096
 
1043
1097
                } else {
1044
1098
                        $this->process_default_headers();
1045
 
                        if ( isset( $this->default_headers[ $choice ] ) )
 
1099
                        if ( isset( $this->default_headers[ $choice ] ) ) {
1046
1100
                                $header_image_data = $this->default_headers[ $choice ];
1047
 
                        else
 
1101
                        } else {
1048
1102
                                return;
 
1103
                        }
1049
1104
                }
1050
1105
 
1051
1106
                set_theme_mod( 'header_image', esc_url_raw( $header_image_data['url'] ) );
1099
1154
         * @return array dst_height and dst_width of header image.
1100
1155
         */
1101
1156
        final public function get_header_dimensions( $dimensions ) {
1102
 
                $max_width = 0;
1103
 
                $width = absint( $dimensions['width'] );
1104
 
                $height = absint( $dimensions['height'] );
1105
 
                $theme_height = get_theme_support( 'custom-header', 'height' );
1106
 
                $theme_width = get_theme_support( 'custom-header', 'width' );
1107
 
                $has_flex_width = current_theme_supports( 'custom-header', 'flex-width' );
 
1157
                $max_width       = 0;
 
1158
                $width           = absint( $dimensions['width'] );
 
1159
                $height          = absint( $dimensions['height'] );
 
1160
                $theme_height    = get_theme_support( 'custom-header', 'height' );
 
1161
                $theme_width     = get_theme_support( 'custom-header', 'width' );
 
1162
                $has_flex_width  = current_theme_supports( 'custom-header', 'flex-width' );
1108
1163
                $has_flex_height = current_theme_supports( 'custom-header', 'flex-height' );
1109
 
                $has_max_width = current_theme_supports( 'custom-header', 'max-width' ) ;
1110
 
                $dst = array( 'dst_height' => null, 'dst_width' => null );
 
1164
                $has_max_width   = current_theme_supports( 'custom-header', 'max-width' );
 
1165
                $dst             = array(
 
1166
                        'dst_height' => null,
 
1167
                        'dst_width'  => null,
 
1168
                );
1111
1169
 
1112
1170
                // For flex, limit size of image displayed to 1500px unless theme says otherwise
1113
1171
                if ( $has_flex_width ) {
1121
1179
 
1122
1180
                if ( $has_flex_height && ( ! $has_flex_width || $width > $max_width ) ) {
1123
1181
                        $dst['dst_height'] = absint( $height * ( $max_width / $width ) );
1124
 
                }
1125
 
                elseif ( $has_flex_height && $has_flex_width ) {
 
1182
                } elseif ( $has_flex_height && $has_flex_width ) {
1126
1183
                        $dst['dst_height'] = $height;
1127
 
                }
1128
 
                else {
 
1184
                } else {
1129
1185
                        $dst['dst_height'] = $theme_height;
1130
1186
                }
1131
1187
 
1132
1188
                if ( $has_flex_width && ( ! $has_flex_height || $width > $max_width ) ) {
1133
1189
                        $dst['dst_width'] = absint( $width * ( $max_width / $width ) );
1134
 
                }
1135
 
                elseif ( $has_flex_width && $has_flex_height ) {
 
1190
                } elseif ( $has_flex_width && $has_flex_height ) {
1136
1191
                        $dst['dst_width'] = $width;
1137
 
                }
1138
 
                else {
 
1192
                } else {
1139
1193
                        $dst['dst_width'] = $theme_width;
1140
1194
                }
1141
1195
 
1152
1206
         * @return array Attachment object.
1153
1207
         */
1154
1208
        final public function create_attachment_object( $cropped, $parent_attachment_id ) {
1155
 
                $parent = get_post( $parent_attachment_id );
 
1209
                $parent     = get_post( $parent_attachment_id );
1156
1210
                $parent_url = wp_get_attachment_url( $parent->ID );
1157
 
                $url = str_replace( basename( $parent_url ), basename( $cropped ), $parent_url );
 
1211
                $url        = str_replace( basename( $parent_url ), basename( $cropped ), $parent_url );
1158
1212
 
1159
 
                $size = @getimagesize( $cropped );
 
1213
                $size       = @getimagesize( $cropped );
1160
1214
                $image_type = ( $size ) ? $size['mime'] : 'image/jpeg';
1161
1215
 
1162
1216
                $object = array(
1163
 
                        'ID' => $parent_attachment_id,
1164
 
                        'post_title' => basename($cropped),
 
1217
                        'ID'             => $parent_attachment_id,
 
1218
                        'post_title'     => basename( $cropped ),
1165
1219
                        'post_mime_type' => $image_type,
1166
 
                        'guid' => $url,
1167
 
                        'context' => 'custom-header',
1168
 
                        'post_parent' => $parent_attachment_id,
 
1220
                        'guid'           => $url,
 
1221
                        'context'        => 'custom-header',
 
1222
                        'post_parent'    => $parent_attachment_id,
1169
1223
                );
1170
1224
 
1171
1225
                return $object;
1185
1239
                unset( $object['post_parent'] );
1186
1240
 
1187
1241
                $attachment_id = wp_insert_attachment( $object, $cropped );
1188
 
                $metadata = wp_generate_attachment_metadata( $attachment_id, $cropped );
 
1242
                $metadata      = wp_generate_attachment_metadata( $attachment_id, $cropped );
1189
1243
 
1190
1244
                // If this is a crop, save the original attachment ID as metadata.
1191
1245
                if ( $parent_id ) {
1227
1281
 
1228
1282
                $crop_details = $_POST['cropDetails'];
1229
1283
 
1230
 
                $dimensions = $this->get_header_dimensions( array(
1231
 
                        'height' => $crop_details['height'],
1232
 
                        'width'  => $crop_details['width'],
1233
 
                ) );
 
1284
                $dimensions = $this->get_header_dimensions(
 
1285
                        array(
 
1286
                                'height' => $crop_details['height'],
 
1287
                                'width'  => $crop_details['width'],
 
1288
                        )
 
1289
                );
1234
1290
 
1235
1291
                $attachment_id = absint( $_POST['id'] );
1236
1292
 
1264
1320
                $new_attachment_id = $this->insert_attachment( $object, $cropped );
1265
1321
 
1266
1322
                $object['attachment_id'] = $new_attachment_id;
1267
 
                $object['url']           = wp_get_attachment_url( $new_attachment_id );;
1268
 
                $object['width']         = $dimensions['dst_width'];
1269
 
                $object['height']        = $dimensions['dst_height'];
 
1323
                $object['url']           = wp_get_attachment_url( $new_attachment_id );
 
1324
 
 
1325
                $object['width']  = $dimensions['dst_width'];
 
1326
                $object['height'] = $dimensions['dst_height'];
1270
1327
 
1271
1328
                wp_send_json_success( $object );
1272
1329
        }
1347
1404
                }
1348
1405
 
1349
1406
                $attachment_id = $data['attachment_id'];
1350
 
                $key = '_wp_attachment_custom_header_last_used_' . get_stylesheet();
 
1407
                $key           = '_wp_attachment_custom_header_last_used_' . get_stylesheet();
1351
1408
                update_post_meta( $attachment_id, $key, time() );
1352
1409
        }
1353
1410
 
1368
1425
                        return $this->default_headers; // easy peasy.
1369
1426
                }
1370
1427
 
1371
 
                $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() );
 
1428
                $default             = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() );
1372
1429
                $already_has_default = false;
1373
1430
 
1374
1431
                foreach ( $this->default_headers as $k => $h ) {
1383
1440
                }
1384
1441
 
1385
1442
                // If the one true image isn't included in the default set, prepend it.
1386
 
                $header_images = array();
 
1443
                $header_images            = array();
1387
1444
                $header_images['default'] = array(
1388
1445
                        'url'           => $default,
1389
1446
                        'thumbnail_url' => $default,
1390
 
                        'description'   => 'Default'
 
1447
                        'description'   => 'Default',
1391
1448
                );
1392
1449
 
1393
1450
                // The rest of the set comes after.
1404
1461
        public function get_uploaded_header_images() {
1405
1462
                $header_images = get_uploaded_header_images();
1406
1463
                $timestamp_key = '_wp_attachment_custom_header_last_used_' . get_stylesheet();
1407
 
                $alt_text_key = '_wp_attachment_image_alt';
 
1464
                $alt_text_key  = '_wp_attachment_image_alt';
1408
1465
 
1409
1466
                foreach ( $header_images as &$header_image ) {
1410
 
                        $header_meta = get_post_meta( $header_image['attachment_id'] );
 
1467
                        $header_meta               = get_post_meta( $header_image['attachment_id'] );
1411
1468
                        $header_image['timestamp'] = isset( $header_meta[ $timestamp_key ] ) ? $header_meta[ $timestamp_key ] : '';
1412
 
                        $header_image['alt_text'] = isset( $header_meta[ $alt_text_key ] ) ? $header_meta[ $alt_text_key ] : '';
 
1469
                        $header_image['alt_text']  = isset( $header_meta[ $alt_text_key ] ) ? $header_meta[ $alt_text_key ] : '';
1413
1470
                }
1414
1471
 
1415
1472
                return $header_images;