5,
'gap_number' => 20,
'unit_gap_number' => 'px',
'height_empty_container' => 300, // px
'upper_height_helper' => 300, // px
'gray_border_color' => '#c3c4c7',
'dark_border_color' => '#646970',
'prefix_text_grow' => '\02715',
'always_show_emptystring' => true,
'emphasize_placeholders' => true,
);
/**
* Initialize the plugin.
*/
public function __construct() {
add_action( 'admin_footer', [ $this, 'admin_footer' ] );
add_action( 'wp_ajax_save_widgets_grow_number', [ $this, 'ajax_save_widgets_grow_number' ], 10 );
}
/**
* Creates a suffix for nonce value.
*
* @return string
*/
private function nonce_action_suffix() {
return date( 'His-Ymd', filemtime( __FILE__ ) );
}
/**
* Creates a nonce value.
*
* @param int|string $action
* @return string
*/
private function create_nonce( $action ) {
return wp_create_nonce( $action . $this->nonce_action_suffix() );
}
/**
* Update 'grow_numer_dashboar' in user meta data.
*
* @see wp_ajax_save_widgets_grow_number action.
*/
public function ajax_save_widgets_grow_number() {
check_ajax_referer( 'save_widgets_grow_number' . $this->nonce_action_suffix() );
$data = array();
if ( isset( $_POST['numbers'] ) && is_array( $_POST['numbers'] ) ) {
$data['numbers'] = array_map( 'intval', $_POST['numbers'] );
$user = wp_get_current_user();
update_user_meta( $user->ID, 'grow_number_dashboard', $data['numbers'] );
}
wp_send_json_success( $data );
}
/**
* Sanitize each setting value.
*
* @param array $settings
* @return array
*/
private function sanitize_settings( $settings ) {
if ( is_int( $settings['upper_grow_number'] ) ) {
if ( 1 > $settings['upper_grow_number'] ) {
$settings['upper_grow_number'] = 1;
} elseif ( 10 < $settings['upper_grow_number'] ) {
$settings['upper_grow_number'] = 10;
}
} else {
$settings['upper_grow_number'] = self::DEFAULT_SETTINGS['upper_grow_number'];
}
if ( is_int( $settings['gap_number'] ) || is_float( $settings['gap_number'] ) ) {
if ( 0 > $settings['gap_number'] ) {
$settings['gap_number'] = 0;
}
} else {
$settings['gap_number'] = self::DEFAULT_SETTINGS['gap_number'];
}
if ( ! is_string( $settings['unit_gap_number'] ) ||
! in_array( $settings['unit_gap_number'], array( 'px', 'em', 'rem', '%' ) ) ) {
$settings['unit_gap_number'] = self::DEFAULT_SETTINGS['unit_gap_number'];
}
if ( is_int( $settings['height_empty_container'] ) ) {
if ( 50 > $settings['height_empty_container'] ) {
$settings['height_empty_container'] = 50;
} elseif ( 500 < $settings['height_empty_container'] ) {
$settings['height_empty_container'] = 500;
}
} else {
$settings['height_empty_container'] = self::DEFAULT_SETTINGS['height_empty_container'];
}
if ( is_int( $settings['upper_height_helper'] ) ) {
if ( 50 > $settings['upper_height_helper'] ) {
$settings['upper_height_helper'] = 50;
} elseif ( 500 < $settings['upper_height_helper'] ) {
$settings['upper_height_helper'] = 500;
}
} else {
$settings['upper_height_helper'] = self::DEFAULT_SETTINGS['upper_height_helper'];
}
if ( ! is_string( $settings['gray_border_color'] ) ||
empty( sanitize_hex_color( $settings['gray_border_color'] ) ) ) {
$settings['gray_border_color'] = self::DEFAULT_SETTINGS['gray_border_color'];
}
if ( ! is_string( $settings['dark_border_color'] ) ||
empty( sanitize_hex_color( $settings['dark_border_color'] ) ) ) {
$settings['dark_border_color'] = self::DEFAULT_SETTINGS['dark_border_color'];
}
if ( ! is_string( $settings['prefix_text_grow'] ) ) {
$settings['prefix_text_grow'] = self::DEFAULT_SETTINGS['prefix_text_grow'];
}
if ( ! is_bool( $settings['always_show_emptystring'] ) ) {
$settings['always_show_emptystring'] = self::DEFAULT_SETTINGS['always_show_emptystring'];
}
if ( ! is_bool( $settings['emphasize_placeholders'] ) ) {
$settings['emphasize_placeholders'] = self::DEFAULT_SETTINGS['emphasize_placeholders'];
}
return $settings;
}
/**
* Minified script.
*
* @param string $text
* @return string
*/
private function minified_script( $text ) {
if ( ! ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ) {
$text = implode( '', array_map( 'trim', explode( "\n", $text ) ) ) . "\n";
}
return $text;
}
/**
* Displays gap number with unit.
*
* @param float|int|string $number
* @param string $unit
* @param int $multiplier
*/
private function print_gap_number( $number, $unit, $multiplier = 1 ) {
$out = '';
$unit = esc_attr( $unit );
if ( ! is_int( $multiplier ) ) {
$multiplier = 1;
}
if ( is_float( $number ) ) {
$out = sprintf( '%.3f%s', $number * $multiplier, $unit );
} elseif ( is_int( $number ) ) {
$out = sprintf( '%d%s', $number * $multiplier , $unit );
} else {
$out = self::DEFAULT_SETTINGS['gap_number'] * $multiplier . 'px';
}
echo esc_js( $out );
}
/**
* Output css and javascript only for dashboard.
*
* @see admin_footer action.
*/
public function admin_footer() {
if ( 'index.php' === $GLOBALS['pagenow'] ) {
$user = wp_get_current_user();
$numbers = get_user_meta( $user->ID, 'grow_number_dashboard', true );
$settings = array();
/**
* Filters the settings.
*
* @since 1.0.0
*
* @param array $settings {
* The array of settings.
*
* @type int $upper_grow_number Default 5.
* @type int $gap_number Default 20.
* @type string $unit_gap_number Default `px`.
* @type int $height_empty_container Default 300.
* @type int $upper_height_helper Default 300.
* @type string $gray_border_color Default `#c3c4c7`.
* @type string $dark_border_color Default `#646970`.
* @type string $prefix_text_grow Default `\02715`.
* @type bool $always_show_emptystring Default true.
* @type bool $emphasize_placeholders Default true.
* }
*/
$settings = apply_filters( __CLASS__ . '\settings', $settings );
if ( ! is_array( $settings ) ) {
$settings = array();
}
$settings = wp_parse_args( $settings, self::DEFAULT_SETTINGS );
$settings = $this->sanitize_settings( $settings );
ob_start();
?>
minified_script( ob_get_clean() ), array(
'style' => array(
'id' => array()
)
) );
ob_start();
?>
minified_script( ob_get_clean() );
}
}
}