Files
display-featured-image-genesis/includes/class-displayfeaturedimagegenesis-settings.php
T

291 lines
10 KiB
PHP
Raw Normal View History

2014-09-17 22:09:05 -04:00
<?php
/**
* @package DisplayFeaturedImageGenesis
* @author Robin Cornett <hello@robincornett.com>
* @license GPL-2.0+
* @link http://robincornett.com
* @copyright 2014 Robin Cornett Creative, LLC
*/
class Display_Featured_Image_Genesis_Settings {
2014-11-02 19:20:00 -05:00
public function do_submenu_page() {
2014-11-02 19:51:39 -05:00
add_theme_page(
2014-11-02 19:20:00 -05:00
__( 'Display Featured Image for Genesis: Settings', 'display-featured-image-genesis' ),
__( 'Display Featured Image Settings', 'display-featured-image-genesis' ),
'manage_options',
'displayfeaturedimagegenesis',
array( $this, 'do_settings_form' )
);
add_action( 'admin_init', array( $this, 'register_settings' ) );
2014-11-02 19:51:39 -05:00
add_action( 'load-appearance_page_displayfeaturedimagegenesis', array( $this, 'help' ) );
2014-11-02 19:20:00 -05:00
}
public function do_settings_form() {
$page_title = get_admin_page_title();
echo '<div class="wrap">';
echo '<h2>' . $page_title . '</h2>';
echo '<form action="options.php" method="post">';
settings_fields( 'displayfeaturedimagegenesis' );
do_settings_sections( 'displayfeaturedimagegenesis' );
submit_button();
settings_errors();
echo '</form>';
echo '</div>';
}
2014-09-17 22:09:05 -04:00
/**
* Settings for media screen
* @return settings for backstretch image options
*
* @since 1.1.0
*/
public function register_settings() {
2014-11-02 19:20:00 -05:00
register_setting( 'displayfeaturedimagegenesis', 'displayfeaturedimage_less_header', 'absint' );
register_setting( 'displayfeaturedimagegenesis', 'displayfeaturedimage_default', array( $this, 'validate_image' ) );
register_setting( 'displayfeaturedimagegenesis', 'displayfeaturedimage_excerpts', array( $this, 'one_zero' ) );
2014-10-21 18:16:00 -04:00
2014-09-17 22:09:05 -04:00
add_settings_section(
'display_featured_image_section',
__( 'Display Featured Image for Genesis', 'display-featured-image-genesis' ),
array( $this, 'section_description'),
2014-11-02 19:20:00 -05:00
'displayfeaturedimagegenesis'
2014-09-17 22:09:05 -04:00
);
add_settings_field(
'displayfeaturedimage_less_header',
'<label for="displayfeaturedimage_less_header">' . __( 'Height' , 'display-featured-image-genesis' ) . '</label>',
array( $this, 'header_size' ),
2014-11-02 19:20:00 -05:00
'displayfeaturedimagegenesis',
2014-09-17 22:09:05 -04:00
'display_featured_image_section'
);
2014-10-16 08:53:41 -04:00
2014-10-21 18:16:00 -04:00
add_settings_field(
'displayfeaturedimage_default',
'<label for="displayfeaturedimage_default">' . __( 'Default Featured Image', 'display-featured-image-genesis' ) . '</label>',
array( $this, 'set_default_image' ),
2014-11-02 19:20:00 -05:00
'displayfeaturedimagegenesis',
2014-10-21 18:16:00 -04:00
'display_featured_image_section'
);
2014-10-28 18:12:44 -04:00
add_settings_field(
'displayfeaturedimage_excerpts',
'<label for="displayfeaturedimage_excerpts">' . __( 'Move Excerpts/Archive Descriptions', 'display-featured-image-genesis' ) . '</label>',
array( $this, 'move_excerpts' ),
2014-11-02 19:20:00 -05:00
'displayfeaturedimagegenesis',
2014-10-28 18:12:44 -04:00
'display_featured_image_section'
);
2014-10-21 18:16:00 -04:00
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
2014-09-17 22:09:05 -04:00
}
/**
* Section description
* @return section description
*
* @since 1.1.0
*/
public function section_description() {
2014-10-28 18:12:44 -04:00
echo '<p>' . __( 'The Display Featured Image for Genesis plugin has three optional settings. Check the Help tab for more information. ', 'display-featured-image-genesis' ) . '</p>';
2014-09-17 22:09:05 -04:00
}
/**
* Setting for reduction amount
* @return number of pixels to remove in backstretch-set.js
*
* @since 1.1.0
*/
public function header_size() {
$value = get_option( 'displayfeaturedimage_less_header', 0 );
echo '<label for="displayfeaturedimage_less_header">' . __( 'Pixels to remove ', 'display-featured-image-genesis' ) . '</label>';
echo '<input type="number" step="1" min="0" max="400" id="displayfeaturedimage_less_header" name="displayfeaturedimage_less_header" value="' . esc_attr( $value ) . '" class="small-text" />';
echo '<p class="description">' . __( 'Changing this number will reduce the backstretch image height by this number of pixels. Default is zero.', 'display-featured-image-genesis' ) . '</p>';
}
2014-10-21 18:16:00 -04:00
/**
* Default image uploader
*
* @return image
*
* @since 1.2.1
*/
public function set_default_image() {
2014-10-24 10:01:43 -04:00
$item = Display_Featured_Image_Genesis_Common::get_image_variables();
2014-10-21 18:16:00 -04:00
2014-11-02 19:20:00 -05:00
if ( ! empty( $item->fallback ) ) {
2014-10-31 10:57:11 -04:00
$preview = wp_get_attachment_image_src( $item->fallback_id, 'medium' );
2014-10-21 18:16:00 -04:00
echo '<div id="upload_logo_preview">';
2014-11-02 19:20:00 -05:00
echo '<img src="' . esc_url( $preview[0] ) . '" />';
2014-10-21 18:16:00 -04:00
echo '</div>';
}
2014-11-02 19:20:00 -05:00
echo '<input type="url" id="default_image_url" name="displayfeaturedimage_default" value="' . esc_url( $item->fallback ) . '" />';
2014-10-21 18:16:00 -04:00
echo '<input id="upload_default_image" type="button" class="upload_default_image button" value="' . __( 'Select Default Image', 'display-featured-image-genesis' ) . '" />';
echo '<p class="description">' . sprintf(
__( 'If you would like to use a default image for the featured image, upload it here. Must be at least %1$s pixels wide.', 'display-featured-image-genesis' ),
2014-10-31 10:57:11 -04:00
absint( $item->large+1 )
) . '</p>';
2014-10-21 18:16:00 -04:00
}
2014-10-28 18:12:44 -04:00
/**
2014-11-02 19:20:00 -05:00
* option to move excerpts to leader image area
2014-10-28 18:12:44 -04:00
* @return 0 1 checkbox
*
* @since 1.3.0
*/
public function move_excerpts() {
$value = get_option( 'displayfeaturedimage_excerpts' );
echo '<input type="checkbox" name="displayfeaturedimage_excerpts" id="displayfeaturedimage_excerpts" value="1"' . checked( 1, $value, false ) . ' class="code" /> <label for="displayfeaturedimage_excerpts">' . __( 'Move excerpts (if used) on single pages and move archive/taxonomy descriptions to overlay the Featured Image.', 'display-featured-image-genesis' ) . '</label>';
}
2014-10-25 17:41:32 -04:00
/**
* Returns previous 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 1.2.2
*/
2014-10-28 18:12:44 -04:00
public function validate_image( $new_value ) {
2014-10-25 17:41:32 -04:00
$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 );
$file = wp_get_attachment_image_src( $id, 'original' );
2014-11-02 19:20:00 -05:00
$message = __( 'Settings saved.', 'display-featured-image-genesis' );
$type = 'updated';
2014-10-25 17:41:32 -04:00
// ok for field to be empty
2014-11-02 19:20:00 -05:00
if ( $new_value ) {
if ( ! $valid ) {
$type = 'error';
$message = __( 'Sorry, that is an invalid file type. The Default Featured Image has been reset to the last valid setting.', 'display-featured-image-genesis' );
$new_value = get_option( 'displayfeaturedimage_default', '' );
}
// if file is an image, but is too small, throw it back
elseif ( $file[1] <= $large ) {
$type = 'error';
$message = __( 'Sorry, your image is too small. The Default Featured Image has been reset to the last valid setting.', 'display-featured-image-genesis' );
$new_value = get_option( 'displayfeaturedimage_default', '' );
}
2014-10-25 17:41:32 -04:00
}
2014-11-02 19:20:00 -05:00
add_settings_error(
'displayfeaturedimage_default',
esc_attr( 'settings-updated' ),
$message,
$type
);
return $new_value;
2014-10-25 17:41:32 -04:00
}
/**
* returns file extension
* @since 1.2.2
*/
2014-10-28 18:12:44 -04:00
protected function get_file_ext( $file ) {
2014-10-25 17:41:32 -04:00
$parsed = @parse_url( $file, PHP_URL_PATH );
return $parsed ? strtolower( pathinfo( $parsed, PATHINFO_EXTENSION ) ) : false;
}
/**
* check if file type is image
* @return file check file extension against list
* @since 1.2.2
*/
2014-10-28 18:12:44 -04:00
protected function is_valid_img_ext( $file ) {
2014-10-25 17:41:32 -04:00
$file_ext = $this->get_file_ext( $file );
$this->valid = empty( $this->valid )
? (array) apply_filters( 'displayfeaturedimage_valid_img_types', array( 'jpg', 'jpeg', 'png', 'gif' ) )
: $this->valid;
return ( $file_ext && in_array( $file_ext, $this->valid ) );
}
2014-10-28 18:12:44 -04:00
/**
* Returns a 1 or 0, for all truthy / falsy values.
*
* Uses double casting. First, we cast to bool, then to integer.
*
* @since 1.3.0
*
* @param mixed $new_value Should ideally be a 1 or 0 integer passed in
* @return integer 1 or 0.
*/
public function one_zero( $new_value ) {
return (int) (bool) $new_value;
}
2014-09-17 22:09:05 -04:00
/**
* Help tab for media screen
* @return help tab with verbose information for plugin
*
* @since 1.1.0
*/
public function help() {
$screen = get_current_screen();
2014-10-25 17:41:32 -04:00
$large = get_option( 'large_size_w' );
2014-09-17 22:09:05 -04:00
2014-11-02 19:20:00 -05:00
$height_help =
2014-10-28 18:12:44 -04:00
'<h3>' . __( 'Height', 'display-featured-image-genesis' ) . '</h3>' .
2014-11-02 19:20:00 -05:00
'<p>' . __( 'Depending on how your header/nav are set up, or if you just do not want your backstretch image to extend to the bottom of the user screen, you may want to change this number. It will raise the bottom line of the backstretch image, making it shorter.', 'display-featured-image-genesis' ) . '</p>';
2014-10-24 10:01:43 -04:00
2014-11-02 19:20:00 -05:00
$default_help =
2014-10-24 10:01:43 -04:00
'<h3>' . __( 'Set a Default Featured Image', 'display-featured-image-genesis' ) . '</h3>' .
2014-10-25 17:41:32 -04:00
'<p>' . __( 'You may set a large image to be used sitewide if a featured image is not available. This image will show on posts, pages, and archives.', 'display-featured-image-genesis' ) . '</p>' .
'<p>' . sprintf(
__( 'Supported file types are: jpg, jpeg, png, and gif. The image must be at least %1$s pixels wide.', 'display-featured-image-genesis' ),
2014-10-31 10:57:11 -04:00
absint( $large+1 )
2014-11-02 19:20:00 -05:00
) . '</p>';
$excerpts_help =
2014-10-28 18:12:44 -04:00
'<h3>' . __( 'Move Excerpts/Archive Descriptions', 'display-featured-image-genesis' ) . '</h3>' .
2014-11-02 19:20:00 -05:00
'<p>' . __( 'By default, archive descriptions (set on the Genesis Archive Settings pages) show below the Default Featured Image, while the archive title displays on top of the image. If you check this box, all headlines, descriptions, and optional excerpts will display in a box overlaying the Featured Image.', 'display-featured-image-genesis' ) . '</p>';
$screen->add_help_tab( array(
'id' => 'displayfeaturedimage_less_header-help',
'title' => __( 'Height', 'display-featured-image-genesis' ),
'content' => $height_help,
) );
$screen->add_help_tab( array(
'id' => 'displayfeaturedimage_default-help',
'title' => __( 'Default Featured Image', 'display-featured-image-genesis' ),
'content' => $default_help,
) );
2014-09-17 22:09:05 -04:00
$screen->add_help_tab( array(
2014-11-02 19:20:00 -05:00
'id' => 'displayfeaturedimage_excerpts-help',
'title' => __( 'Move Excerpts', 'display-featured-image-genesis' ),
'content' => $excerpts_help,
2014-09-17 22:09:05 -04:00
) );
}
2014-10-21 18:16:00 -04:00
/**
* enqueue admin scripts
* @return scripts to use image uploader
*
* @since 1.2.1
*/
public function enqueue_scripts() {
wp_register_script( 'displayfeaturedimage-upload', plugins_url( '/includes/js/settings-upload.js', dirname( __FILE__ ) ), array( 'jquery', 'media-upload', 'thickbox' ), '1.0.0' );
2014-11-02 19:51:39 -05:00
if ( 'appearance_page_displayfeaturedimagegenesis' === get_current_screen()->id ) {
2014-10-21 18:16:00 -04:00
wp_enqueue_media();
wp_enqueue_script( 'displayfeaturedimage-upload' );
}
}
2014-09-17 22:09:05 -04:00
}