File: /disk001/machen/www/support/wp-content/themes/wp-moose/inc/customizer/sanitize-functions.php
<?php
/**
* Select sanitization callback example.
*
* - Sanitization: select
* - Control: select, radio
*
* Sanitization callback for 'select' and 'radio' type controls. This callback sanitizes `$input`
* as a slug, and then validates `$input` against the choices defined for the control.
*
* @see sanitize_key() https://developer.wordpress.org/reference/functions/sanitize_key/
* @see $wp_customize->get_control() https://developer.wordpress.org/reference/classes/wp_customize_manager/get_control/
*
* @param string $input Slug to sanitize.
* @param WP_Customize_Setting $setting Setting instance.
*
* @return string Sanitized slug if it is a valid choice; otherwise, the setting default.
*/
function wp_moose_sanitize_select( $input, $setting ) {
// Get list of choices from the control associated with the setting.
$choices = $setting->manager->get_control( $setting->id )->choices;
// If the input is a valid key, return it; otherwise, return the default.
return ( array_key_exists( $input, $choices ) ? $input : $setting->default );
}
/**
* Multi Select sanitization callback example.
*
* - Sanitization: select
* - Control: multi-select, sortable
*
* Sanitization callback for 'multi-select' or 'sortable' type controls. This callback sanitizes `$input`
* as a slug, and then validates `$input` against the choices defined for the control.
*
* @see sanitize_key() https://developer.wordpress.org/reference/functions/sanitize_key/
* @see $wp_customize->get_control() https://developer.wordpress.org/reference/classes/wp_customize_manager/get_control/
*
* @param array $input Slug to sanitize.
* @param WP_Customize_Setting $setting Setting instance.
*
* @return string Sanitized slug if it is a valid choice; otherwise, the setting default.
*/
function wp_moose_sanitize_multi_select( $input, $setting ) {
// Get list of choices from the control associated with the setting.
$choices = $setting->manager->get_control( $setting->id )->choices;
$input_keys = $input;
foreach ( $input_keys as $key => $value ) {
if ( ! array_key_exists( $value, $choices ) ) {
unset( $input[ $key ] );
}
}
// If the input is a valid key, return it; otherwise, return the default.
return ( is_array( $input ) ? $input : $setting->default );
}
/**
* Checkbox sanitization callback example.
*
* Sanitization callback for 'checkbox' type controls. This callback sanitizes `$checked`
* as a boolean value, either TRUE or FALSE.
*
* @param bool $checked Whether the checkbox is checked.
*
* @return bool Whether the checkbox is checked.
*/
function wp_moose_sanitize_checkbox( $checked ) {
// Boolean check.
return isset( $checked ) && true == $checked;
}
/**
* Sanitizes page/post in slider
*
* @param $input raw page/post id
*
* @return sanitized page/post id
*/
function wp_moose_sanitize_post( $input ) {
// Ensure $input is an absolute integer.
$page_id = absint( $input );
// If $page_id is an ID of a published page, return it; otherwise, return false
return ( 'publish' == get_post_status( $page_id ) ? $page_id : false );
}
/**
* Image sanitization callback example.
*
* Checks the image's file extension and mime type against a whitelist. If they're allowed,
* send back the filename, otherwise, return the setting default.
*
* - Sanitization: image file extension
* - Control: text, WP_Customize_Image_Control
*
* @see wp_check_filetype() https://developer.wordpress.org/reference/functions/wp_check_filetype/
*
* @param string $image Image filename.
* @param WP_Customize_Setting $setting Setting instance.
*
* @return string The image filename if the extension is allowed; otherwise, the setting default.
*/
function wp_moose_sanitize_image( $image, $setting ) {
/*
* Array of valid image file types.
*
* The array includes image mime types that are included in wp_get_mime_types()
*/
$mimes = array(
'jpg|jpeg|jpe' => 'image/jpeg',
'gif' => 'image/gif',
'png' => 'image/png',
'bmp' => 'image/bmp',
'tif|tiff' => 'image/tiff',
'ico' => 'image/x-icon'
);
// Return an array with file extension and mime_type.
$file = wp_check_filetype( $image, $mimes );
// If $image has a valid mime_type, return it; otherwise, return the default.
return ( $file['ext'] ? $image : '' );
}
/**
* RGBA color sanitization callback example.
*
* @param $color
*
* @return string|void
*/
function wp_moose_sanitize_rgba_color( $color ) {
if ( empty( $color ) || is_array( $color ) ) {
return 'rgba(0,0,0,0)';
}
// If string does not start with 'rgba', then treat as hex
// sanitize the hex color and finally convert hex to rgba
if ( false === strpos( $color, 'rgba' ) ) {
return sanitize_hex_color( $color );
}
// By now we know the string is formatted as an rgba color so we need to further sanitize it.
$color = str_replace( ' ', '', $color );
sscanf( $color, 'rgba(%d,%d,%d,%f)', $red, $green, $blue, $alpha );
return 'rgba(' . $red . ',' . $green . ',' . $blue . ',' . $alpha . ')';
}
/**
* RGB color sanitization callback example.
*
* @param $color
*
* @return string|void
*/
function wp_moose_sanitize_rgb_color( $color ) {
if ( empty( $color ) || is_array( $color ) ) {
return 'rgb(0,0,0)';
}
// If string does not start with 'rgba', then treat as hex
// sanitize the hex color and finally convert hex to rgba
if ( false === strpos( $color, 'rgba' ) ) {
return sanitize_hex_color( $color );
}
// By now we know the string is formatted as an rgba color so we need to further sanitize it.
$color = str_replace( ' ', '', $color );
sscanf( $color, 'rgba(%d,%d,%d,%f)', $red, $green, $blue, $alpha );
return 'rgb(' . $red . ',' . $green . ',' . $blue . ')';
}
/**
* Sanitizes category list in slider
*
* @param $input entered value
*
* @return sanitized output
*
* @since 1.0.0
*/
function wp_moose_sanitize_category_list( $input ) {
if ( is_array( $input ) && '' != $input ) {
if ( in_array( 0, $input ) ) {
return '0';
}
$args = array(
'type' => 'post',
'child_of' => 0,
'parent' => '',
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => 0,
'hierarchical' => 0,
'taxonomy' => 'category',
);
$categories = ( get_categories( $args ) );
$category_list = array();
foreach ( $categories as $category ) {
$category_list = array_merge( $category_list, array( $category->term_id ) );
}
if ( count( array_intersect( $input, $category_list ) ) == count( $input ) ) {
return $input;
} else {
return '';
}
} else {
return '';
}
}
/**
* Number Range sanitization callback example.
*
* - Sanitization: number_range
* - Control: number, tel
*
* Sanitization callback for 'number' or 'tel' type text inputs. This callback sanitizes
* `$number` as an absolute integer within a defined min-max range.
*
* @see absint() https://developer.wordpress.org/reference/functions/absint/
*
* @param int $number Number to check within the numeric range defined by the setting.
* @param WP_Customize_Setting $setting Setting instance.
*
* @return int|string The number, if it is zero or greater and falls within the defined range; otherwise,
* the setting default.
*/
function wp_moose_sanitize_number_range( $number, $setting ) {
// Ensure input is an absolute integer.
$number = absint( $number );
// Get the input attributes associated with the setting.
$atts = $setting->manager->get_control( $setting->id )->input_attrs;
// Get minimum number in the range.
$min = ( isset( $atts['min'] ) ? $atts['min'] : $number );
// Get maximum number in the range.
$max = ( isset( $atts['max'] ) ? $atts['max'] : $number );
// Get step.
$step = ( isset( $atts['step'] ) ? $atts['step'] : 1 );
// If the number is within the valid range, return it; otherwise, return the default
return ( $min <= $number && $number <= $max && is_int( $number / $step ) ? $number : $setting->default );
}
/**
* Generate range sanitize function based on min max value
*
* @param $min
* @param $max
* @param int $step
*
* @return Closure
*/
function wp_moose_number_range_sanitizer( $min, $max, $step = 1 ) {
return function ( $number, $setting ) use ( $min, $max, $step ) {
if ( isset( $max ) && $number > $max ) {
$number = $max;
} elseif ( $number < $min ) {
$number = $min;
}
$dv = (float) $number / $step;
$dv = round( $dv );
$number = $dv * $step;
$number = number_format( (float) $number, 2, '.', '' );
if ( $number == (int) $number ) {
$number = (int) $number;
}
return is_numeric( $number ) ? $number : 0;
// // Ensure input is an absolute integer.
// $number = absint( $number );
//
// // If the number is within the valid range, return it; otherwise, return the default
// return ( $min <= $number && $number <= $max && is_int( $number / $step ) ? $number : $setting->default );
};
}
/**
* Sanitize Font weight
*
* @param mixed $input setting input.
*
* @return mixed setting input value.
*/
function wp_moose_font_weight_sanitizer( $input ) {
$valid = array(
'normal',
'bold',
'100',
'200',
'300',
'400',
'500',
'600',
'700',
'800',
'900',
);
if ( in_array( $input, $valid ) ) {
return $input;
} else {
return 'normal';
}
}
/**
* Sanitize Font variant
*
* @param mixed $input setting input.
*
* @return mixed setting input value.
*/
function wp_moose_font_variant_sanitizer( $input ) {
if ( is_array( $input ) ) {
$input = implode( ',', $input );
}
return sanitize_text_field( $input );
}