From 1ec79fded23f95931b67aab90d5aff6b9efe133c Mon Sep 17 00:00:00 2001 From: Robin Cornett Date: Sat, 3 Jan 2015 18:08:27 -0500 Subject: [PATCH] update settings page, better validation for cpt images As of this moment, cpt images will return empty if the value is invalid. Better than resetting to fallback, but still not ideal. --- ...s-displayfeaturedimagegenesis-settings.php | 85 +++++++++++++------ 1 file changed, 61 insertions(+), 24 deletions(-) diff --git a/includes/class-displayfeaturedimagegenesis-settings.php b/includes/class-displayfeaturedimagegenesis-settings.php index 8766cfd..c327e61 100644 --- a/includes/class-displayfeaturedimagegenesis-settings.php +++ b/includes/class-displayfeaturedimagegenesis-settings.php @@ -153,20 +153,14 @@ class Display_Featured_Image_Genesis_Settings { 'displayfeaturedimagegenesis' ); - // foreach ( $this->post_types as $post_type ) { - add_settings_field( - "displayfeaturedimagegenesis[post_types]", - __( ' Featured Image', 'display-featured-image-genesis' ), - array( $this, 'set_cpt_image' ), - 'displayfeaturedimagegenesis', - 'display_featured_image_custom_post_types' - // array( 'label for' => 'displayfeaturedimagegenesis' . $post_type->name ) - ); - - // $this->post_type = $post_type->name; - - // } + add_settings_field( + "displayfeaturedimagegenesis[post_types]", + __( 'Featured Images for Custom Post Types', 'display-featured-image-genesis' ), + array( $this, 'set_cpt_image' ), + 'displayfeaturedimagegenesis', + 'display_featured_image_custom_post_types' + ); } @@ -242,12 +236,13 @@ class Display_Featured_Image_Genesis_Settings { $item = Display_Featured_Image_Genesis_Common::get_image_variables(); - foreach ( $this->post_types as $post_type ) { - $post_type = $post_type->name; + foreach ( $this->post_types as $post ) { + + $post_type = $post->name; if ( empty( $this->displaysetting['post_type'][$post_type] ) ) { $this->displaysetting['post_type'][$post_type] = ''; } - echo '

' . $post_type . '

'; + echo '

' . $post->label . '

'; if ( ! empty( $this->displaysetting['post_type'][$post_type] ) ) { $id = Display_Featured_Image_Genesis_Common::get_image_id( $this->displaysetting['post_type'][$post_type] ); $preview = wp_get_attachment_image_src( $id, 'medium' ); @@ -256,14 +251,9 @@ class Display_Featured_Image_Genesis_Settings { echo ''; } echo ''; - echo ''; - echo '

' . sprintf( - __( 'If you would like to use a featured image for the %1$s archive, upload it here. Must be at least %2$s pixels wide.', 'display-featured-image-genesis' ), - $post_type, - absint( $item->large + 1 ) - ) . '

'; + echo ''; - } + } } @@ -339,7 +329,7 @@ class Display_Featured_Image_Genesis_Settings { $new_value['feed_image'] = $this->one_zero( $new_value['feed_image'] ); foreach ( $this->post_types as $post_type ) { - $new_value['post_type'][$post_type->name] = $this->validate_image( $new_value['post_type'][$post_type->name] ); + $new_value['post_type'][$post_type->name] = $this->validate_post_type_image( $new_value['post_type'][$post_type->name] ); } return $new_value; @@ -395,6 +385,53 @@ class Display_Featured_Image_Genesis_Settings { return $new_value; } + /** + * Returns empty value for image if not correct file type/size + * @param string $new_value New value + * @return string New or previous value, depending on allowed image size. + * @since x.y.z + */ + protected function validate_post_type_image( $new_value ) { + + $new_value = esc_url( $new_value ); + $valid = $this->is_valid_img_ext( $new_value ); + $large = get_option( 'large_size_w' ); + $id = Display_Featured_Image_Genesis_Common::get_image_id( $new_value ); + $metadata = wp_get_attachment_metadata( $id ); + $width = $metadata['width']; + + // ok for field to be empty + if ( $new_value ) { + + if ( ! $valid ) { + $message = __( 'Sorry, that is an invalid file type.', 'display-featured-image-genesis' ); + $new_value = ''; + + add_settings_error( + $this->displaysetting['post_type'], + esc_attr( 'invalid' ), + $message, + 'error' + ); + } + // if file is an image, but is too small, throw it back + elseif ( $width <= $large ) { + $message = __( 'Sorry, your image is too small.', 'display-featured-image-genesis' ); + $new_value = ''; + + add_settings_error( + $this->displaysetting['post_type'], + esc_attr( 'weetiny' ), + $message, + 'error' + ); + } + + } + + return $new_value; + } + /** * returns file extension * @since 1.2.2