namespace WPForms\Admin\Education\Builder;
use WPForms\Admin\Education\Helpers;
private $slug = 'wpforms-pdf';
public function init(): void {
$this->addon_data = $this->get_addon_data();
if ( ! $this->should_show_popup() ) {
private function should_show_popup(): bool {
if ( ! wpforms_is_admin_page( 'builder' ) && ! wpforms_is_admin_ajax() ) {
if ( ! current_user_can( wpforms_get_capability_manage_options() ) ) {
$challenge = wpforms()->obj( 'challenge' );
if ( ! $challenge || $challenge->challenge_active() ) {
return $this->is_popup_visible();
private function is_popup_visible(): bool {
if ( empty( $this->addon_data ) && ! wpforms()->is_pro() ) {
$meta = get_user_meta( get_current_user_id(), 'wpforms_dismissed', true );
return empty( $meta['edu-builder-pdf'] );
private function hooks(): void {
add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
add_filter( 'wpforms_builder_output_before_toolbar', [ $this, 'popup_html' ] );
public function enqueue_scripts(): void {
$min = wpforms_get_min_suffix();
WPFORMS_PLUGIN_URL . "assets/js/admin/education/pdf$min.js",
* @param string|mixed $html HTML.
* @noinspection HtmlUnknownTarget
public function popup_html( $html ): string {
'<div id="wpforms-pdf-popup" class="wpforms-pdf-popup wpforms-hidden wpforms-dismiss-container" role="dialog" aria-modal="true" aria-labelledby="wpforms-pdf-popup-title" aria-describedby="wpforms-pdf-popup-description">
<div class="wpforms-pdf-popup-content">
<img src="%1$s" alt="PDF Icon">
<div class="close-popup wpforms-dismiss-button dashicons-no-alt" data-section="builder-pdf"></div>
<div class="badge">%2$s</div>
<h2 id="wpforms-pdf-popup-title">%3$s</h2>
<p id="wpforms-pdf-popup-description">%4$s</p>
esc_url( WPFORMS_PLUGIN_URL . 'assets/images/pdf-education/pdf.svg' ),
__( 'NEW FEATURE', 'wpforms-lite' ),
__( 'PDF Addon', 'wpforms-lite' ),
__( 'Easily turn form entry data into beautifully designed PDFs and attach them to notifications.' ),
* @noinspection HtmlUnknownAttribute
private function get_button_html(): string {
$addon = $this->addon_data;
$action = $addon['action'] ?? 'switch';
[ $button_label, $button_utm, $button_class, $button_attr ] = $this->get_button_data( $action, $addon );
'<button class="wpforms-btn wpforms-btn-sm wpforms-btn-orange %1$s" data-action="%2$s" %4$s data-license="%5$s" data-utm-content="%6$s">%3$s</button>',
esc_attr( $button_class ),
esc_html( $button_label ),
esc_attr( $addon['license_level'] ?? 'pro' ),
private function get_addon_data(): array {
* Filter the slug for the PDF educational popup.
* @param string $slug The slug for the PDF educational popup.
$slug = apply_filters( 'wpforms_admin_education_builder_pdf_get_addon_data_slug', $this->slug );
$addons = Helpers::get_edu_addons();
return $addons[ $slug ] ?? [];
* @param string $action Action type (switch, upgrade, etc.).
* @param array $addon Addon data.
protected function get_button_data( string $action, array $addon ): array {
$button_label = $action === 'upgrade'
? esc_html__( 'Upgrade to Pro', 'wpforms-lite' )
: esc_html__( 'Try it Out', 'wpforms-lite' );
$button_utm = 'PDF Addon Pop-up';
$button_class = 'education-action-button';
if ( $action === 'switch' ) {
$button_class = 'education-modal education-switch-button';
$button_attr = 'data-target="wpforms-pdf"';
} elseif ( $action !== 'upgrade' ) {
$button_class = 'education-modal';
'data-nonce="%1$s" data-path="%2$s" data-url="%3$s" data-message="" data-name="%4$s"',
esc_attr( wp_create_nonce( 'wpforms-admin' ) ),
esc_html__( 'WPForms PDF Addon', 'wpforms-lite' )
return [ $button_label, $button_utm, $button_class, $button_attr ];