]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-admin/custom-header.php
Wordpress 4.6
[autoinstalls/wordpress.git] / wp-admin / custom-header.php
index a56c7602c685d617975c9af3cd805da993cd30b9..fc5adb670ede0b7267b34295b906f3d1ac4b66bf 100644 (file)
@@ -18,7 +18,7 @@ class Custom_Image_Header {
        /**
         * Callback for administration header.
         *
-        * @var callback
+        * @var callable
         * @since 2.1.0
         */
        public $admin_header_callback;
@@ -26,7 +26,7 @@ class Custom_Image_Header {
        /**
         * Callback for header div.
         *
-        * @var callback
+        * @var callable
         * @since 3.0.0
         */
        public $admin_image_div_callback;
@@ -41,6 +41,10 @@ class Custom_Image_Header {
        public $default_headers = array();
 
        /**
+        * Used to trigger a success message when settings updated and set to true.
+        *
+        * @since 3.0.0
+        * @access private
         * @var bool
         */
        private $updated;
@@ -49,8 +53,8 @@ class Custom_Image_Header {
         * Constructor - Register administration header callback.
         *
         * @since 2.1.0
-        * @param callback $admin_header_callback
-        * @param callback $admin_image_div_callback Optional custom image div output callback.
+        * @param callable $admin_header_callback
+        * @param callable $admin_image_div_callback Optional custom image div output callback.
         */
        public function __construct($admin_header_callback, $admin_image_div_callback = '') {
                $this->admin_header_callback = $admin_header_callback;
@@ -228,6 +232,8 @@ class Custom_Image_Header {
         * Process the default headers
         *
         * @since 3.0.0
+        *
+        * @global array $_wp_default_headers
         */
        public function process_default_headers() {
                global $_wp_default_headers;
@@ -255,6 +261,9 @@ class Custom_Image_Header {
         * Random image option is on by default if no header has been set.
         *
         * @since 3.0.0
+        *
+        * @param string $type The header type. One of 'default' (for the Uploaded Images control)
+        *                     or 'uploaded' (for the Uploaded Images control).
         */
        public function show_header_selector( $type = 'default' ) {
                if ( 'default' == $type ) {
@@ -267,7 +276,7 @@ class Custom_Image_Header {
                if ( 1 < count( $headers ) ) {
                        echo '<div class="random-header">';
                        echo '<label><input name="default-header" type="radio" value="random-' . $type . '-image"' . checked( is_random_header_image( $type ), true, false ) . ' />';
-                       echo __( '<strong>Random:</strong> Show a different image on each page.' );
+                       _e( '<strong>Random:</strong> Show a different image on each page.' );
                        echo '</label>';
                        echo '</div>';
                }
@@ -276,13 +285,13 @@ class Custom_Image_Header {
                foreach ( $headers as $header_key => $header ) {
                        $header_thumbnail = $header['thumbnail_url'];
                        $header_url = $header['url'];
-                       $header_desc = empty( $header['description'] ) ? '' : $header['description'];
+                       $header_alt_text = empty( $header['alt_text'] ) ? '' : $header['alt_text'];
                        echo '<div class="default-header">';
                        echo '<label><input name="default-header" type="radio" value="' . esc_attr( $header_key ) . '" ' . checked( $header_url, get_theme_mod( 'header_image' ), false ) . ' />';
                        $width = '';
                        if ( !empty( $header['attachment_id'] ) )
                                $width = ' width="230"';
-                       echo '<img src="' . set_url_scheme( $header_thumbnail ) . '" alt="' . esc_attr( $header_desc ) .'" title="' . esc_attr( $header_desc ) . '"' . $width . ' /></label>';
+                       echo '<img src="' . set_url_scheme( $header_thumbnail ) . '" alt="' . esc_attr( $header_alt_text ) .'"' . $width . ' /></label>';
                        echo '</div>';
                }
                echo '<div class="clear"></div></div>';
@@ -315,7 +324,6 @@ class Custom_Image_Header {
                        }
                }
                ?>
-
 <script type="text/javascript">
 (function($){
        var default_color = '<?php echo $default_color; ?>',
@@ -445,7 +453,7 @@ class Custom_Image_Header {
 ?>
 
 <div class="wrap">
-<h2><?php _e( 'Custom Header' ); ?></h2>
+<h1><?php _e( 'Custom Header' ); ?></h1>
 
 <?php if ( current_user_can( 'customize' ) ) { ?>
 <div class="notice notice-info hide-if-no-customize">
@@ -508,7 +516,7 @@ class Custom_Image_Header {
 </tr>
 <?php endif; ?>
 
-<?php if ( current_theme_supports( 'custom-header', 'uploads' ) ) : ?>
+<?php if ( current_user_can( 'upload_files' ) && current_theme_supports( 'custom-header', 'uploads' ) ) : ?>
 <tr>
 <th scope="row"><?php _e( 'Select Image' ); ?></th>
 <td>
@@ -518,16 +526,48 @@ class Custom_Image_Header {
                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' ) );
        } elseif ( current_theme_supports( 'custom-header', 'flex-height' ) ) {
                if ( ! current_theme_supports( 'custom-header', 'flex-width' ) )
-                       printf( __( 'Images should be at least <strong>%1$d pixels</strong> wide.' ) . ' ', get_theme_support( 'custom-header', 'width' ) );
+                       printf(
+                               /* translators: %s: size in pixels */
+                               __( 'Images should be at least %s wide.' ) . ' ',
+                               sprintf(
+                                       /* translators: %d: custom header width */
+                                       '<strong>' . __( '%d pixels' ) . '</strong>',
+                                       get_theme_support( 'custom-header', 'width' )
+                               )
+                       );
        } elseif ( current_theme_supports( 'custom-header', 'flex-width' ) ) {
                if ( ! current_theme_supports( 'custom-header', 'flex-height' ) )
-                       printf( __( 'Images should be at least <strong>%1$d pixels</strong> tall.' ) . ' ', get_theme_support( 'custom-header', 'height' ) );
+                       printf(
+                               /* translators: %s: size in pixels */
+                               __( 'Images should be at least %s tall.' ) . ' ',
+                               sprintf(
+                                       /* translators: %d: custom header height */
+                                       '<strong>' . __( '%d pixels' ) . '</strong>',
+                                       get_theme_support( 'custom-header', 'height' )
+                               )
+                       );
        }
        if ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) {
                if ( current_theme_supports( 'custom-header', 'width' ) )
-                       printf( __( 'Suggested width is <strong>%1$d pixels</strong>.' ) . ' ', get_theme_support( 'custom-header', 'width' ) );
+                       printf(
+                               /* translators: %s: size in pixels */
+                               __( 'Suggested width is %s.' ) . ' ',
+                               sprintf(
+                                       /* translators: %d: custom header width */
+                                       '<strong>' . __( '%d pixels' ) . '</strong>',
+                                       get_theme_support( 'custom-header', 'width' )
+                               )
+                       );
                if ( current_theme_supports( 'custom-header', 'height' ) )
-                       printf( __( 'Suggested height is <strong>%1$d pixels</strong>.' ) . ' ', get_theme_support( 'custom-header', 'height' ) );
+                       printf(
+                               /* translators: %s: size in pixels */
+                               __( 'Suggested height is %s.' ) . ' ',
+                               sprintf(
+                                       /* translators: %d: custom header height */
+                                       '<strong>' . __( '%d pixels' ) . '</strong>',
+                                       get_theme_support( 'custom-header', 'height' )
+                               )
+                       );
        }
        ?></p>
        <form enctype="multipart/form-data" id="upload-form" class="wp-upload-form" method="post" action="<?php echo esc_url( add_query_arg( 'step', 2 ) ) ?>">
@@ -681,8 +721,13 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
         */
        public function step_2() {
                check_admin_referer('custom-header-upload', '_wpnonce-custom-header-upload');
-               if ( ! current_theme_supports( 'custom-header', 'uploads' ) )
-                       wp_die( __( 'Cheatin&#8217; uh?' ), 403 );
+               if ( ! current_theme_supports( 'custom-header', 'uploads' ) ) {
+                       wp_die(
+                               '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
+                               '<p>' . __( 'The current theme does not support uploading a custom header image.' ) . '</p>',
+                               403
+                       );
+               }
 
                if ( empty( $_POST ) && isset( $_GET['file'] ) ) {
                        $attachment_id = absint( $_GET['file'] );
@@ -753,14 +798,14 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
                ?>
 
 <div class="wrap">
-<h2><?php _e( 'Crop Header Image' ); ?></h2>
+<h1><?php _e( 'Crop Header Image' ); ?></h1>
 
 <form method="post" action="<?php echo esc_url(add_query_arg('step', 3)); ?>">
        <p class="hide-if-no-js"><?php _e('Choose the part of the image you want to use as your header.'); ?></p>
-       <p class="hide-if-js"><strong><?php _e( 'You need Javascript to choose a part of the image.'); ?></strong></p>
+       <p class="hide-if-js"><strong><?php _e( 'You need JavaScript to choose a part of the image.'); ?></strong></p>
 
        <div id="crop_image" style="position: relative">
-               <img src="<?php echo esc_url( $url ); ?>" id="upload" width="<?php echo $width; ?>" height="<?php echo $height; ?>" />
+               <img src="<?php echo esc_url( $url ); ?>" id="upload" width="<?php echo $width; ?>" height="<?php echo $height; ?>" alt="" />
        </div>
 
        <input type="hidden" name="x1" id="x1" value="0"/>
@@ -828,15 +873,27 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
         * Display third step of custom header image page.
         *
         * @since 2.1.0
+        * @since 4.4.0 Switched to using wp_get_attachment_url() instead of the guid
+        *              for retrieving the header image URL.
         */
        public function step_3() {
                check_admin_referer( 'custom-header-crop-image' );
 
-               if ( ! current_theme_supports( 'custom-header', 'uploads' ) )
-                       wp_die( __( 'Cheatin&#8217; uh?' ), 403 );
+               if ( ! current_theme_supports( 'custom-header', 'uploads' ) ) {
+                       wp_die(
+                               '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
+                               '<p>' . __( 'The current theme does not support uploading a custom header image.' ) . '</p>',
+                               403
+                       );
+               }
 
-               if ( ! empty( $_POST['skip-cropping'] ) && ! ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) )
-                       wp_die( __( 'Cheatin&#8217; uh?' ), 403 );
+               if ( ! empty( $_POST['skip-cropping'] ) && ! ( current_theme_supports( 'custom-header', 'flex-height' ) || current_theme_supports( 'custom-header', 'flex-width' ) ) ) {
+                       wp_die(
+                               '<h1>' . __( 'Cheatin&#8217; uh?' ) . '</h1>' .
+                               '<p>' . __( 'The current theme does not support a flexible sized header image.' ) . '</p>',
+                               403
+                       );
+               }
 
                if ( $_POST['oitar'] > 1 ) {
                        $_POST['x1'] = $_POST['x1'] * $_POST['oitar'];
@@ -876,7 +933,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
                // Update the attachment
                $attachment_id = $this->insert_attachment( $object, $cropped );
 
-               $url = $object['guid'];
+               $url = wp_get_attachment_url( $attachment_id );
                $this->set_header_image( compact( 'url', 'attachment_id', 'width', 'height' ) );
 
                // Cleanup.
@@ -909,7 +966,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
         */
        public function admin_page() {
                if ( ! current_user_can('edit_theme_options') )
-                       wp_die(__('You do not have permission to customize headers.'));
+                       wp_die(__('Sorry, you are not allowed to customize headers.'));
                $step = $this->step();
                if ( 2 == $step )
                        $this->step_2();
@@ -923,6 +980,9 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
         * Unused since 3.5.0.
         *
         * @since 3.4.0
+        *
+        * @param array $form_fields
+        * @return array $form_fields
         */
        public function attachment_fields_to_edit( $form_fields ) {
                return $form_fields;
@@ -932,6 +992,9 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
         * Unused since 3.5.0.
         *
         * @since 3.4.0
+        *
+        * @param array $tabs
+        * @return array $tabs
         */
        public function filter_upload_tabs( $tabs ) {
                return $tabs;
@@ -941,13 +1004,13 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
         * Choose a header image, selected from existing uploaded and default headers,
         * or provide an array of uploaded header data (either new, or from media library).
         *
+        * @since 3.4.0
+        *
         * @param mixed $choice Which header image to select. Allows for values of 'random-default-image',
         *      for randomly cycling among the default images; 'random-uploaded-image', for randomly cycling
         *      among the uploaded images; the key of a default image registered for that theme; and
-        *      the key of an image uploaded for that theme (the basename of the URL).
+        *      the key of an image uploaded for that theme (the attachment ID of the image).
         *  Or an array of arguments: attachment_id, url, width, height. All are required.
-        *
-        * @since 3.4.0
         */
        final public function set_header_image( $choice ) {
                if ( is_array( $choice ) || is_object( $choice ) ) {
@@ -999,7 +1062,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
         * @since 3.4.0
         */
        final public function remove_header_image() {
-               return $this->set_header_image( 'remove-header' );
+               $this->set_header_image( 'remove-header' );
        }
 
        /**
@@ -1013,9 +1076,10 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
                $this->process_default_headers();
                $default = get_theme_support( 'custom-header', 'default-image' );
 
-               if ( ! $default )
-                       return $this->remove_header_image();
-
+               if ( ! $default ) {
+                       $this->remove_header_image();
+                       return;
+               }
                $default = sprintf( $default, get_template_directory_uri(), get_stylesheet_directory_uri() );
 
                $default_data = array();
@@ -1033,6 +1097,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
        /**
         * Calculate width and height based on what the currently selected theme supports.
         *
+        * @param array $dimensions
         * @return array dst_height and dst_width of header image.
         */
        final public function get_header_dimensions( $dimensions ) {
@@ -1082,14 +1147,14 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
        /**
         * Create an attachment 'object'.
         *
-        * @param string $cropped Cropped image URL.
-        * @param int $parent_attachment_id Attachment ID of parent image.
+        * @param string $cropped              Cropped image URL.
+        * @param int    $parent_attachment_id Attachment ID of parent image.
         *
         * @return array Attachment object.
         */
        final public function create_attachment_object( $cropped, $parent_attachment_id ) {
                $parent = get_post( $parent_attachment_id );
-               $parent_url = $parent->guid;
+               $parent_url = wp_get_attachment_url( $parent->ID );
                $url = str_replace( basename( $parent_url ), basename( $cropped ), $parent_url );
 
                $size = @getimagesize( $cropped );
@@ -1098,7 +1163,6 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
                $object = array(
                        'ID' => $parent_attachment_id,
                        'post_title' => basename($cropped),
-                       'post_content' => $url,
                        'post_mime_type' => $image_type,
                        'guid' => $url,
                        'context' => 'custom-header'
@@ -1110,7 +1174,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
        /**
         * Insert an attachment and its metadata.
         *
-        * @param array $object Attachment object.
+        * @param array  $object  Attachment object.
         * @param string $cropped Cropped image URL.
         *
         * @return int Attachment ID.
@@ -1119,7 +1183,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
                $attachment_id = wp_insert_attachment( $object, $cropped );
                $metadata = wp_generate_attachment_metadata( $attachment_id, $cropped );
                /**
-                * Filter the header image attachment metadata.
+                * Filters the header image attachment metadata.
                 *
                 * @since 3.9.0
                 *
@@ -1180,6 +1244,7 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
                $new_attachment_id = $this->insert_attachment( $object, $cropped );
 
                $object['attachment_id'] = $new_attachment_id;
+               $object['url']           = wp_get_attachment_url( $new_attachment_id );;
                $object['width']         = $dimensions['dst_width'];
                $object['height']        = $dimensions['dst_height'];
 
@@ -1238,6 +1303,10 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
                wp_send_json_success();
        }
 
+       /**
+        *
+        * @param WP_Customize_Manager $wp_customize
+        */
        public function customize_set_last_used( $wp_customize ) {
                $data = $wp_customize->get_setting( 'header_image_data' )->post_value();
 
@@ -1250,6 +1319,10 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
                update_post_meta( $attachment_id, $key, time() );
        }
 
+       /**
+        *
+        * @return array
+        */
        public function get_default_header_images() {
                $this->process_default_headers();
 
@@ -1283,10 +1356,13 @@ wp_nonce_field( 'custom-header-options', '_wpnonce-custom-header-options' ); ?>
                );
 
                // The rest of the set comes after.
-               $header_images = array_merge( $header_images, $this->default_headers );
-               return $header_images;
+               return array_merge( $header_images, $this->default_headers );
        }
 
+       /**
+        *
+        * @return array
+        */
        public function get_uploaded_header_images() {
                $header_images = get_uploaded_header_images();
                $timestamp_key = '_wp_attachment_custom_header_last_used_' . get_stylesheet();