0 ), $atts, 'hey_feedback' ); $id = absint( $atts['id'] ); if ( 0 === $id ) { return ''; } global $wpdb; $table = Database::items_table(); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching $widget = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM %i WHERE id = %d AND status = %s", $table, $id, 'active' ) ); if ( ! $widget ) { return ''; } self::maybe_enqueue_assets(); $settings = json_decode( $widget->settings, true ); if ( ! is_array( $settings ) ) { $settings = array(); } $widget_data = array( 'id' => (int) $widget->id, 'type' => sanitize_text_field( $widget->type ), 'settings' => self::sanitize_settings( $settings ), ); return '
'; } /** * Enqueues frontend assets if not already done. */ private static function maybe_enqueue_assets() { if ( self::$assets_enqueued ) { return; } self::$assets_enqueued = true; wp_enqueue_style( 'hey-feedback-front', HEY_FEEDBACK_URL . 'assets/css/frontend.css', array(), HEY_FEEDBACK_VERSION ); wp_enqueue_script( 'hey-feedback-front', HEY_FEEDBACK_URL . 'assets/js/frontend.js', array(), HEY_FEEDBACK_VERSION, true ); if ( ! wp_script_is( 'hey-feedback-front', 'done' ) ) { wp_localize_script( 'hey-feedback-front', 'heyFeedback', array( 'restUrl' => esc_url_raw( rest_url( 'hey-feedback/v1/' ) ), 'nonce' => wp_create_nonce( 'wp_rest' ), 'pageId' => get_queried_object_id(), 'pageUrl' => esc_url_raw( home_url( add_query_arg( array() ) ) ), ) ); } } /** * Whitelist settings for frontend output. * * @param array $settings Raw settings. * @return array */ private static function sanitize_settings( array $settings ): array { $allowed_keys = array( 'title', 'description', 'button_text', 'thank_you_message', 'placeholder', 'emoji_set', 'choices', 'question', 'max_stars', 'low_label', 'high_label', 'like_label', 'dislike_label', 'min_length', 'max_length', 'position', 'theme', ); return array_intersect_key( $settings, array_flip( $allowed_keys ) ); } }