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() ); } } }