Файловый менеджер - Редактировать - /home/infrafs/INFRABIKEIT/wp-content/plugins/wpforms-lite.tar
Назад
templates/emails/summary-footer.php 0000644 00000001635 15134366226 0013533 0 ustar 00 <?php /** * Summary footer template. * * This template can be overridden by copying it to yourtheme/wpforms/emails/summary-footer.php. * * @since 1.6.2.3 * * @version 1.6.2.3 */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> </td> </tr> <tr> <td align="center" valign="top" class="footer"> <?php echo wp_kses( sprintf( /* translators: %1$s - link to a site; %2$s - link to the documentation. */ __( 'This email was auto-generated and sent from %1$s. Learn <a href="%2$s">how to disable</a>.', 'wpforms-lite' ), '<a href="' . esc_url( home_url() ) . '">' . esc_html( wp_specialchars_decode( get_bloginfo( 'name' ) ) ) . '</a>', 'https://wpforms.com/docs/how-to-use-email-summaries/#faq' ), [ 'a' => [ 'href' => [], ], ] ); ?> </td> </tr> </table> </td> </tr> </table> </body> </html> templates/emails/general-body.php 0000644 00000000551 15134366226 0013106 0 ustar 00 <?php /** * General body template. * * This template can be overridden by copying it to yourtheme/wpforms/emails/general-body.php. * * @since 1.5.4 * * @version 1.5.4 * * @var string $message */ if ( ! \defined( 'ABSPATH' ) ) { exit; } ?> <table> <tbody> <tr> <td> <?php echo \wp_kses_post( $message ); ?> </td> </tr> </tbody> </table> templates/emails/general-body-plain.php 0000644 00000000454 15134366226 0014211 0 ustar 00 <?php /** * General body template (plain text). * * This template can be overridden by copying it to yourtheme/wpforms/emails/general-body-plain.php. * * @since 1.5.4 * * @version 1.5.4 * * @var string $message */ if ( ! \defined( 'ABSPATH' ) ) { exit; } echo \wp_kses_post( $message ); templates/emails/general-style.php 0000644 00000001102 15134366226 0013302 0 ustar 00 <?php /** * General style template. * * This template can be overridden by copying it to yourtheme/wpforms/emails/general-style.php. * * @since 1.5.4 * * @version 1.5.4 * * @var string $email_background_color */ if ( ! \defined( 'ABSPATH' ) ) { exit; } require \WPFORMS_PLUGIN_DIR . '/assets/css/emails/general.min.css'; ?> body, .body { background-color: <?php echo \esc_attr( $email_background_color ); ?>; } <?php if ( ! empty( $header_image_max_width ) ) : ?> .header img { max-width: <?php echo \esc_attr( $header_image_max_width ); ?>; } <?php endif; ?> templates/emails/general-footer.php 0000644 00000001166 15134366226 0013452 0 ustar 00 <?php /** * General footer template. * * This template can be overridden by copying it to yourtheme/wpforms/emails/general-footer.php. * * @since 1.5.4 * * @version 1.5.4 */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> </td> </tr> <tr> <td align="center" valign="top" class="footer"> <?php /* translators: %s - link to a site. */ printf( esc_html__( 'Sent from %s', 'wpforms-lite' ), '<a href="' . esc_url( home_url() ) . '">' . esc_html( wp_specialchars_decode( get_bloginfo( 'name' ) ) ) . '</a>' ); ?> </td> </tr> </table> </td> </tr> </table> </body> </html> templates/emails/general-header.php 0000644 00000002340 15134366226 0013377 0 ustar 00 <?php /** * General header template. * * This template can be overridden by copying it to yourtheme/wpforms/emails/general-header.php. * * @since 1.5.4 * * @version 1.5.4 * * @var string $title * @var string $header_image */ if ( ! \defined( 'ABSPATH' ) ) { exit; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width"> <title><?php echo \esc_html( $title ); ?></title> </head> <body> <table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" class="body"> <tr> <td align="center" valign="top" class="body-inner"> <table border="0" cellpadding="0" cellspacing="0" class="container"> <tr> <td align="center" valign="middle" class="header"> <?php if ( ! empty( $header_image['url'] ) ) : ?> <img src="<?php echo \esc_url( $header_image['url'] ); ?>" <?php echo isset( $header_image['width'] ) ? 'width="' . \absint( $header_image['width'] ) . '"' : ''; ?> alt="<?php echo \esc_attr( \get_bloginfo( 'name' ) ); ?>" /> <?php endif; ?> </td> </tr> <tr> <td align="left" valign="top" class="content"> templates/emails/summary-style.php 0000644 00000001110 15134366226 0013361 0 ustar 00 <?php /** * Email Summary style template. * * This template can be overridden by copying it to yourtheme/wpforms/emails/summary-style.php. * * @since 1.5.4 * * @version 1.5.4 * * @var string $email_background_color */ if ( ! \defined( 'ABSPATH' ) ) { exit; } require \WPFORMS_PLUGIN_DIR . '/assets/css/emails/summary.min.css'; ?> body, .body { background-color: <?php echo \esc_attr( $email_background_color ); ?>; } <?php if ( ! empty( $header_image_max_width ) ) : ?> .header img { max-width: <?php echo \esc_attr( $header_image_max_width ); ?>; } <?php endif; ?> templates/emails/summary-body.php 0000644 00000014577 15134366226 0013203 0 ustar 00 <?php /** * Email Summary body template. * * This template can be overridden by copying it to yourtheme/wpforms/emails/summary-body.php. * * @since 1.5.4 * * @var array $entries * @var array $info_block */ use WPForms\Integrations\LiteConnect\LiteConnect; if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <table class="summary-container"> <tbody> <tr> <td> <h6 class="greeting"><?php esc_html_e( 'Hi there!', 'wpforms-lite' ); ?></h6> <?php if ( wpforms()->is_pro() ) : ?> <p class="large"><?php esc_html_e( 'Let’s see how your forms performed in the past week.', 'wpforms-lite' ); ?></p> <?php else : ?> <p class="large"><?php esc_html_e( 'Let’s see how your forms performed.', 'wpforms-lite' ); ?></p> <p class="lite-disclaimer"> <?php esc_html_e( 'Below is the total number of submissions for each form. However, form entries are not stored by WPForms Lite.', 'wpforms-lite' ); ?> </p> <?php if ( LiteConnect::is_enabled() ) : ?> <p class="lite-disclaimer"> <strong><?php esc_html_e( 'We’ve got you covered!', 'wpforms-lite' ); ?></strong><br/> <?php printf( wp_kses( /* translators: %s - WPForms.com Upgrade page URL. */ __( 'Your entries are being backed up securely in the cloud. When you’re ready to manage your entries inside WordPress, just <a href="%s" target="_blank" rel="noopener noreferrer">upgrade to Pro</a> and we’ll automatically import them in seconds!', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'rel' => [], 'target' => [], ], ] ), 'https://wpforms.com/lite-upgrade/?utm_source=WordPress&utm_medium=Weekly%20Summary%20Email&utm_campaign=liteplugin&utm_content=Upgrade' ); ?> </p> <p class="lite-disclaimer"> <?php printf( '<a href="%1$s" target="_blank" rel="noopener noreferrer">%2$s</a>', 'https://wpforms.com/lite-upgrade/?utm_source=WordPress&utm_medium=Weekly%20Summary%20Email&utm_campaign=liteplugin&utm_content=Upgrade', esc_html__( 'Check out what else you’ll get with your Pro license.', 'wpforms-lite' ) ); ?> </p> <?php else : ?> <p class="lite-disclaimer"> <strong><?php esc_html_e( 'Note: Entry backups are not enabled.', 'wpforms-lite' ); ?></strong><br/> <?php esc_html_e( 'We recommend that you enable entry backups to guard against lost entries.', 'wpforms-lite' ); ?> </p> <p class="lite-disclaimer"> <?php printf( wp_kses( /* translators: %s - WPForms.com Documentation page URL. */ __( 'Backups are completely free, 100%% secure, and you can turn them on in a few clicks! <a href="%s" target="_blank" rel="noopener noreferrer">Enable entry backups now.</a>', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'rel' => [], 'target' => [], ], ] ), 'https://wpforms.com/docs/how-to-use-lite-connect-for-wpforms/#backup-with-lite-connect/?utm_source=WordPress&utm_medium=Weekly%20Summary%20Email&utm_campaign=liteplugin&utm_content=Documentation' ); ?> </p> <p class="lite-disclaimer"> <?php printf( wp_kses( /* translators: %s - WPForms.com Upgrade page URL. */ __( 'When you’re ready to manage your entries inside WordPress, <a href="%s" target="_blank" rel="noopener noreferrer">upgrade to Pro</a> to import your entries.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'rel' => [], 'target' => [], ], ] ), 'https://wpforms.com/lite-upgrade/?utm_source=WordPress&utm_medium=Weekly%20Summary%20Email&utm_campaign=liteplugin&utm_content=Upgrade' ); ?> </p> <?php endif; ?> <?php endif; ?> <table class="email-summaries"> <thead> <tr> <th><?php esc_html_e( 'Form', 'wpforms-lite' ); ?></th> <th class="entries-column text-center"><?php esc_html_e( 'Entries', 'wpforms-lite' ); ?></th> </tr> </thead> <tbody> <?php foreach ( $entries as $row ) : ?> <tr> <td class="text-large"><?php echo isset( $row['title'] ) ? esc_html( $row['title'] ) : ''; ?></td> <td class="entry-count text-large"> <?php if ( empty( $row['edit_url'] ) ) : ?> <span> <?php echo isset( $row['count'] ) ? absint( $row['count'] ) : ''; ?> </span> <?php else : ?> <a href="<?php echo esc_url( $row['edit_url'] ); ?>"> <?php echo isset( $row['count'] ) ? absint( $row['count'] ) : ''; ?> </a> <?php endif; ?> </td> </tr> <?php endforeach; ?> <?php if ( empty( $entries ) ) : ?> <tr> <td class="text-center" colspan="2"><?php esc_html_e( 'It appears you do not have any form entries yet.', 'wpforms-lite' ); ?></td> </tr> <?php endif; ?> </tbody> </table> <?php if ( ! empty( $info_block ) ) : ?> <table class="summary-info-table"> <?php if ( ! empty( $info_block['title'] ) || ! empty( $info_block['content'] ) ) : ?> <tr> <td class="summary-info-content"> <table> <?php if ( ! empty( $info_block['title'] ) ) : ?> <tr> <td class="text-center"> <h6><?php echo esc_html( $info_block['title'] ); ?></h6> </td> </tr> <?php endif; ?> <?php if ( ! empty( $info_block['content'] ) ) : ?> <tr> <td class="text-center"><?php echo wp_kses_post( $info_block['content'] ); ?></td> </tr> <?php endif; ?> </table> </td> </tr> <?php endif; ?> <?php if ( ! empty( $info_block['url'] ) && ! empty( $info_block['button'] ) ) : ?> <tr> <td class="summary-info-content button-container"> <center> <table class="button rounded-button"> <tr> <td> <table> <tr> <td> <a href="<?php echo esc_url( $info_block['url'] ); ?>" rel="noopener noreferrer" target="_blank"> <?php echo esc_html( $info_block['button'] ); ?> </a> </td> </tr> </table> </td> </tr> </table> </center> </td> </tr> <?php endif; ?> </table> <?php endif; ?> </td> </tr> </tbody> </table> templates/emails/summary-body-plain.php 0000644 00000003667 15134366226 0014302 0 ustar 00 <?php /** * Email Summary body template (plain text). * * This template can be overridden by copying it to yourtheme/wpforms/emails/summary-body-plain.php. * * @since 1.5.4 * * @var array $entries * @var array $info_block */ if ( ! defined( 'ABSPATH' ) ) { exit; } echo esc_html__( 'Hi there!', 'wpforms-lite' ) . "\n\n"; if ( wpforms()->is_pro() ) { echo esc_html__( 'Let’s see how your forms performed in the past week.', 'wpforms-lite' ) . "\n\n"; } else { echo esc_html__( 'Let’s see how your forms performed.', 'wpforms-lite' ) . "\n\n"; echo esc_html__( 'Below is the total number of submissions for each form, however actual entries are not stored in WPForms Lite.', 'wpforms-lite' ) . "\n\n"; echo esc_html__( 'To view future entries inside your WordPress dashboard, and get more detailed reports, consider upgrading to Pro:', 'wpforms-lite' ); echo ' '; echo 'https://wpforms.com/lite-upgrade/?utm_source=WordPress&utm_medium=Weekly%20Summary%20Email&utm_campaign=liteplugin&utm_content=Upgrade'; echo "\n\n\n"; } echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n\n"; echo esc_html__( 'Form', 'wpforms-lite' ) . ' | ' . esc_html__( 'Entries', 'wpforms-lite' ) . "\n\n"; echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n\n"; foreach ( $entries as $row ) { echo ( isset( $row['title'] ) ? esc_html( $row['title'] ) : '' ) . ' | ' . ( isset( $row['count'] ) ? absint( $row['count'] ) : '' ) . "\n\n"; } if ( empty( $entries ) ) { echo esc_html__( 'It appears you do not have any form entries yet.', 'wpforms-lite' ) . "\n\n"; } echo "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n\n\n"; if ( ! empty( $info_block['title'] ) ) { echo esc_html( $info_block['title'] ) . "\n\n"; } if ( ! empty( $info_block['content'] ) ) { echo wp_kses_post( $info_block['content'] ) . "\n\n"; } if ( ! empty( $info_block['button'] ) && ! empty( $info_block['url'] ) ) { echo esc_html( $info_block['button'] ) . ': ' . esc_url( $info_block['url'] ) . "\n\n"; } templates/emails/general-queries.php 0000644 00000000475 15134366226 0013633 0 ustar 00 <?php /** * General media queries style template. * * This template can be overridden by copying it to yourtheme/wpforms/emails/general-queries.php. * * @since 1.5.4 * * @version 1.5.4 */ if ( ! \defined( 'ABSPATH' ) ) { exit; } require \WPFORMS_PLUGIN_DIR . 'assets/css/emails/partials/media_queries.css'; templates/emails/summary-footer-plain.php 0000644 00000001216 15134366226 0014627 0 ustar 00 <?php /** * Summary footer template (plain text). * * This template can be overridden by copying it to yourtheme/wpforms/emails/summary-footer-plain.php. * * @since 1.6.2.3 * * @version 1.6.2.3 */ if ( ! defined( 'ABSPATH' ) ) { exit; } echo "\n---\n\n"; printf( /* translators: %s - link to a site. */ esc_html__( 'This email was auto-generated and sent from %s.', 'wpforms-lite' ), esc_html( wp_specialchars_decode( get_bloginfo( 'name' ) ) ) ); echo "\n"; printf( /* translators: %s - link to the documentation. */ esc_html__( 'Learn how to disable: %s.', 'wpforms-lite' ), 'https://wpforms.com/docs/how-to-use-email-summaries/#faq' ); templates/builder/revisions/notice-disabled.php 0000644 00000001355 15134366226 0015764 0 ustar 00 <?php /** * "Revisions are disabled" notice in the Form Builder Revisions panel. * * @since 1.7.3 */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <div class='wpforms-revisions-notice wpforms-revisions-notice-error'> <h2><?php esc_html_e( 'Form Revisions Are Disabled', 'wpforms-lite' ); ?></h2> <p><?php esc_html_e( 'It appears that revisions are disabled on your WordPress installation. You can enable revisions for WPForms while leaving posts revisions disabled.', 'wpforms-lite' ); ?></p> <a href="https://wpforms.com/docs/how-to-use-form-revisions-in-wpforms/#enable-post-revisions" target='_blank' rel='noopener noreferrer' class='button button-primary button-large'> <?php esc_html_e( 'Learn How', 'wpforms-lite' ); ?> </a> </div> templates/builder/revisions/list.php 0000644 00000004370 15134366226 0013711 0 ustar 00 <?php /** * A list of form revisions in the Form Builder Revisions panel. * * @since 1.7.3 * * @var string $active_class Active item class. * @var string $current_version_url The URL to load the current form version. * @var string $author_id Current form author ID. * @var array $revisions A list of all form revisions. */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <div class='wpforms-revisions-content'> <div class="wpforms-revision-current-version<?php echo esc_attr( $active_class ); ?>"> <a href="<?php echo esc_url( $current_version_url ); ?>"> <div class='wpforms-revision-gravatar'> <?php echo get_avatar( $author_id, 40 ); ?> </div> <div class='wpforms-revision-details'> <p class='wpforms-revision-created'> <strong><?php esc_html_e( 'Current Version', 'wpforms-lite' ); ?></strong> </p> <p class='wpforms-revision-author'> <?php $display_name = get_the_author_meta( 'display_name', $author_id ); printf( /* translators: %s - form revision author name. */ esc_html__( 'by %s', 'wpforms-lite' ), ! empty( $display_name ) ? esc_html( $display_name ) : esc_html__( 'Unknown user', 'wpforms-lite' ) ); ?> </p> </div> </a> </div> <ul class="wpforms-revisions-list"> <?php foreach ( $revisions as $revision ) : ?> <li class="wpforms-revision<?php echo esc_attr( $revision['active_class'] ); ?>"> <a href="<?php echo esc_url( $revision['url'] ); ?>"> <div class='wpforms-revision-gravatar'> <?php echo get_avatar( $revision['author_id'], 40 ); ?> </div> <div class='wpforms-revision-details'> <p class='wpforms-revision-created'> <strong><?php echo esc_html( $revision['time_diff'] ); ?></strong> (<?php echo esc_html( $revision['date_time'] ); ?>) </p> <p class='wpforms-revision-author'> <?php $display_name = get_the_author_meta( 'display_name', $revision['author_id'] ); printf( /* translators: %s - form revision author name. */ esc_html__( 'by %s', 'wpforms-lite' ), ! empty( $display_name ) ? esc_html( $display_name ) : esc_html__( 'Unknown user', 'wpforms-lite' ) ); ?> </p> </div> </a> </li> <?php endforeach; ?> </ul> </div> templates/builder/revisions/notice-limited.php 0000644 00000001621 15134366226 0015640 0 ustar 00 <?php /** * "Revisions are limited" notice in the Form Builder Revisions panel. * * @since 1.7.3 * * @var int $revisions_to_keep How many revisions are kept. */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <div class='wpforms-revisions-notice wpforms-revisions-notice-warning'> <h2><?php esc_html_e( 'Form Revisions Are Limited', 'wpforms-lite' ); ?></h2> <p> <?php printf( /* translators: %d Maximum number of revisions to keep. */ esc_html__( 'Revisions are enabled, but they’re limited to %d. You can increase this by making a simple change to your WordPress configuration.', 'wpforms-lite' ), absint( $revisions_to_keep ) ); ?> </p> <a href="https://wpforms.com/docs/how-to-use-form-revisions-in-wpforms/#enable-post-revisions" target="_blank" rel="noopener noreferrer" class='button button-primary button-large'> <?php esc_html_e( 'Learn How', 'wpforms-lite' ); ?> </a> </div> templates/builder/templates-item.php 0000644 00000004746 15134366226 0013656 0 ustar 00 <?php /** * Panel Setup (form templates). * Form templates list item template. * * @since 1.6.8 * * @var string $selected_class Selected item class. * @var string $license_class License class (in the case of higher license needed). * @var string $categories Categories, coma separated. * @var string $badge_text Badge text. * @var string $demo_url Template demo URL. * @var string $template_id Template ID (Slug or ID if available). * @var string $education_class Education class (in the case of higher license needed). * @var string $education_attributes Education attributes. * @var string $addons_attributes Required addons attributes. * @var array $template Template data. */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <div class="wpforms-template<?php echo esc_attr( $selected_class ); ?><?php echo esc_attr( $license_class ); ?>" id="wpforms-template-<?php echo sanitize_html_class( $template['slug'] ); ?>"> <h3 class="wpforms-template-name categories" data-categories="<?php echo esc_attr( $categories ); ?>"> <?php echo esc_html( $template['name'] ); ?> </h3> <?php if ( ! empty( $badge_text ) ) { ?> <span class="wpforms-template-badge"><?php echo esc_html( $badge_text ); ?></span> <?php } ?> <?php if ( ! empty( $template['description'] ) ) : ?> <p class="wpforms-template-desc"><?php echo esc_html( $template['description'] ); ?></p> <?php endif; ?> <div class="wpforms-template-buttons"> <a href="#" class="wpforms-template-select wpforms-btn wpforms-btn-md wpforms-btn-orange<?php echo esc_attr( $education_class ); ?>" data-template-name-raw="<?php echo esc_attr( $template['name'] ); ?>" data-template="<?php echo esc_attr( $template_id ); ?>" data-slug="<?php echo esc_attr( $template['slug'] ); ?>" <?php echo $education_attributes; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> <?php echo $addons_attributes; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>> <?php $template['slug'] !== 'blank' ? esc_html_e( 'Use Template', 'wpforms-lite' ) : esc_html_e( 'Create Blank Form', 'wpforms-lite' ); ?> </a> <?php if ( $template['url'] !== '' ) : ?> <a class="wpforms-template-demo wpforms-btn wpforms-btn-md wpforms-btn-light-grey" href="<?php echo esc_url( $demo_url ); ?>" target="_blank" rel="noopener noreferrer"> <?php esc_html_e( 'View Demo', 'wpforms-lite' ); ?> </a> <?php endif; ?> </div> </div> templates/builder/help.php 0000644 00000013423 15134366226 0011644 0 ustar 00 <?php /** * Form Builder Help Screen template. * * @since 1.6.3 * * @var array $settings Help Screen settings. */ if ( ! defined( 'ABSPATH' ) ) { exit; } $times_svg = '<svg width="1792" height="1792" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1490 1322q0 40-28 68l-136 136q-28 28-68 28t-68-28l-294-294-294 294q-28 28-68 28t-68-28l-136-136q-28-28-28-68t28-68l294-294-294-294q-28-28-28-68t28-68l136-136q28-28 68-28t68 28l294 294 294-294q28-28 68-28t68 28l136 136q28 28 28 68t-28 68l-294 294 294 294q28 28 28 68z"/></svg>'; $url_parameters = add_query_arg( [ 'utm_campaign' => wpforms()->is_pro() ? 'plugin' : 'liteplugin', 'utm_source' => 'WordPress', 'utm_medium' => rawurlencode( 'Builder Help Modal' ), 'utm_content' => '', ], '' ); $links_utm_medium = 'Builder Help Modal'; ?> <div id="wpforms-builder-help" style="display: none; opacity: 0;" class="wpforms-admin-page"> <img id="wpforms-builder-help-logo" src="<?php echo esc_url( WPFORMS_PLUGIN_URL . 'assets/images/sullie-alt.png' ); ?>" title="<?php esc_attr_e( 'Sullie the WPForms mascot', 'wpforms-lite' ); ?>" alt="WPForms Logo"> <div id="wpforms-builder-help-close" title="<?php esc_attr_e( 'Close', 'wpforms-lite' ); ?>"> <?php echo $times_svg; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> </div> <div id="wpforms-builder-help-content"> <div id="wpforms-builder-help-search"> <input type="text" placeholder="<?php esc_attr_e( 'Ask a question or search the docs...', 'wpforms-lite' ); ?>"> <div id="wpforms-builder-help-search-clear" title="<?php esc_attr_e( 'Clear', 'wpforms-lite' ); ?>"> <?php echo $times_svg; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> </div> </div> <div id="wpforms-builder-help-no-result" style="display: none;"> <ul class="wpforms-builder-help-docs"> <li> <i class="fa fa-info-circle"></i><span><?php esc_html_e( 'No docs found', 'wpforms-lite' ); ?></span> </li> </ul> </div> <div id="wpforms-builder-help-result"></div> <div id="wpforms-builder-help-categories"></div> <div id="wpforms-builder-help-footer"> <div class="wpforms-builder-help-footer-block"> <i class="fa fa-file-text-o"></i> <h3><?php esc_html_e( 'View Documentation', 'wpforms-lite' ); ?></h3> <p><?php esc_html_e( 'Browse documentation, reference material, and tutorials for WPForms.', 'wpforms-lite' ); ?></p> <a href="<?php echo esc_url( wpforms_utm_link( $settings['docs_url'], $links_utm_medium, 'View Documentation' ) ); ?>" class="wpforms-btn wpforms-btn-md wpforms-btn-light-grey" rel="noopener noreferrer" target="_blank"> <?php esc_html_e( 'View All Documentation', 'wpforms-lite' ); ?> </a> </div> <div class="wpforms-builder-help-footer-block"> <i class="fa fa-support"></i> <h3><?php esc_html_e( 'Get Support', 'wpforms-lite' ); ?></h3> <?php if ( wpforms()->is_pro() ) { ?> <p><?php esc_html_e( 'Submit a ticket and our world class support team will be in touch soon.', 'wpforms-lite' ); ?></p> <a href="<?php echo esc_url( wpforms_utm_link( $settings['support_ticket_url'], $links_utm_medium, 'Contact Support' ) ); ?>" class="wpforms-btn wpforms-btn-md wpforms-btn-light-grey" rel="noopener noreferrer" target="_blank"> <?php esc_html_e( 'Submit a Support Ticket', 'wpforms-lite' ); ?> </a> <?php } else { ?> <p><?php esc_html_e( 'Upgrade to WPForms Pro to access our world class customer support.', 'wpforms-lite' ); ?></p> <a href="<?php echo esc_url( wpforms_utm_link( $settings['upgrade_url'], $links_utm_medium, 'Upgrade For Support' ) ); ?>" class="wpforms-btn wpforms-btn-md wpforms-btn-orange" rel="noopener noreferrer" target="_blank"> <?php esc_html_e( 'Upgrade to WPForms Pro', 'wpforms-lite' ); ?> </a> <?php } ?> </div> </div> </div> </div> <script type="text/html" id="tmpl-wpforms-builder-help-categories"> <ul class="wpforms-builder-help-categories-toggle"> <# _.each( data.categories, function( categoryTitle, categorySlug ) { #> <li class="wpforms-builder-help-category"> <header> <i class="fa fa-folder-open-o wpforms-folder"></i> <span>{{{ categoryTitle }}}</span> <i class="fa fa-angle-right wpforms-arrow"></i> </header> <ul class="wpforms-builder-help-docs" style="display: none;"> <# _.each( data.docs[ categorySlug ], function( doc, index ) { utmContent = encodeURIComponent( doc.title ); #> <li> <i class="fa fa-file-text-o"></i><a href="{{ doc.url }}<?php echo esc_url( $url_parameters ); ?>={{ utmContent }}" rel="noopener noreferrer" target="_blank">{{{ doc.title }}}</a> </li> <# if ( index === 4 && data.docs[ categorySlug ].length > 4 ) { #> <div style="display: none;"> <# } #> <# } ) #> <# if ( data.docs[ categorySlug ].length > 4 ) { #> </div> <button class="wpforms-btn wpforms-btn-md wpforms-btn-light-grey viewall" type="button"><?php esc_html_e( 'View All', 'wpforms-lite' ); ?> {{{ categoryTitle }}} <?php esc_html_e( 'Docs', 'wpforms-lite' ); ?></button> <# } #> </ul> </li> <# } ) #> </ul> </script> <script type="text/html" id="tmpl-wpforms-builder-help-categories-error"> <h4 class="wpforms-builder-help-error"> <?php esc_html_e( 'Unfortunately the error occurred while downloading help data.', 'wpforms-lite' ); ?> </h4> </script> <script type="text/html" id="tmpl-wpforms-builder-help-docs"> <ul class="wpforms-builder-help-docs"> <# _.each( data.docs, function( doc, index ) { utmContent = encodeURIComponent( doc.title ); #> <li> <i class="fa fa-file-text-o"></i><a href="{{ doc.url }}<?php echo esc_url( $url_parameters ); ?>={{ utmContent }}" rel="noopener noreferrer" target="_blank">{{{ doc.title }}}</a> </li> <# } ) #> </ul> </script> templates/builder/abort-message.php 0000644 00000001500 15134366226 0013436 0 ustar 00 <?php /** * Form Builder abort message screen template. * * @since 1.7.3 * * @var string $message An abort message to display. */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <div id="wpforms-builder-abort-message" class="wpforms-fullscreen-notice wpforms-notice-white wpforms-admin-page"> <h3 class="waving-hand-emoji"><?php esc_html_e( 'Hi there!', 'wpforms-lite' ); ?></h3> <p><?php echo esc_html( $message ); ?></p> <img src="<?php echo esc_url( WPFORMS_PLUGIN_URL . 'assets/images/empty-states/no-forms.svg' ); ?>" alt=""> <?php if ( wpforms_current_user_can( 'view_forms' ) ) { ?> <a href="<?php echo esc_url( admin_url( 'admin.php?page=wpforms-overview' ) ); ?>" class="wpforms-btn wpforms-btn-lg wpforms-btn-orange"> <?php esc_html_e( 'Back to All Forms', 'wpforms-lite' ); ?> </a> <?php } ?> </div> templates/admin/dashboard/widget/settings.php 0000644 00000005347 15134366226 0015436 0 ustar 00 <?php /** * Dashboard widget settings gear icon template. * * @since 1.7.4 * * @var int $graph_style Graph style, value 1 for Bar style, 2 for Line style. * @var int $color_scheme Color scheme, value 1 for WPForms color scheme, 2 for for WordPress color scheme. * @var bool $enabled If form fields should be enabled. */ if ( ! defined( 'ABSPATH' ) ) { exit; } $disabled = ! $enabled; ?> <div class="wpforms-dash-widget-settings-container"> <button id="wpforms-dash-widget-settings-button" class="wpforms-dash-widget-settings-button button" type="button"> <span class="dashicons dashicons-admin-generic"></span> </button> <div class="wpforms-dash-widget-settings-menu <?php echo $disabled ? 'disabled' : ''; ?>"> <div class="wpforms-dash-widget-settings-menu-wrap"> <h4><?php esc_html_e( 'Graph Style', 'wpforms-lite' ); ?></h4> <div> <div class="wpforms-dash-widget-settings-menu-item"> <input type="radio" id="wpforms-dash-widget-settings-style-bar" name="wpforms-style" value="1" <?php checked( '1', $graph_style ); ?> <?php disabled( $disabled ); ?>> <label for="wpforms-dash-widget-settings-style-bar" <?php disabled( $disabled ); ?>><?php esc_html_e( 'Bar', 'wpforms-lite' ); ?></label> </div> <div class="wpforms-dash-widget-settings-menu-item"> <input type="radio" id="wpforms-dash-widget-settings-style-line" name="wpforms-style" value="2" <?php checked( '2', $graph_style ); ?> <?php disabled( $disabled ); ?>> <label for="wpforms-dash-widget-settings-style-line" <?php disabled( $disabled ); ?>><?php esc_html_e( 'Line', 'wpforms-lite' ); ?></label> </div> </div> </div> <div class="wpforms-dash-widget-settings-menu-wrap color-scheme"> <h4><?php esc_html_e( 'Color Scheme', 'wpforms-lite' ); ?></h4> <div> <div class="wpforms-dash-widget-settings-menu-item"> <input type="radio" id="wpforms-dash-widget-settings-color-wpforms" name="wpforms-color" value="1" <?php checked( '1', $color_scheme ); ?> <?php disabled( $disabled ); ?>> <label for="wpforms-dash-widget-settings-color-wpforms" <?php disabled( $disabled ); ?>><?php esc_html_e( 'WPForms', 'wpforms-lite' ); ?></label> </div> <div class="wpforms-dash-widget-settings-menu-item"> <input type="radio" id="wpforms-dash-widget-settings-color-wp" name="wpforms-color" value="2" <?php checked( '2', $color_scheme ); ?> <?php disabled( $disabled ); ?>> <label for="wpforms-dash-widget-settings-color-wp" <?php disabled( $disabled ); ?>><?php esc_html_e( 'WordPress', 'wpforms-lite' ); ?></label> </div> </div> </div> <button type="button" class="button wpforms-dash-widget-settings-menu-save" <?php disabled( $disabled ); ?>><?php esc_html_e( 'Save Changes', 'wpforms-lite' ); ?></button> </div> </div> templates/admin/form-embed-wizard/tooltip.php 0000644 00000002511 15134366226 0015357 0 ustar 00 <?php /** * Form Embed Wizard. * Embed page tooltip HTML template. * * @since 1.6.2 */ if ( ! \defined( 'ABSPATH' ) ) { exit; } ?> <div class="wpforms-admin-form-embed-wizard-tooltip"> <div id="wpforms-admin-form-embed-wizard-tooltip-content"> <?php if ( wpforms_is_gutenberg_active() ) : // Gutenberg content. ?> <h3><?php esc_html_e( 'Add a Block', 'wpforms-lite' ); ?></h3> <p> <?php printf( wp_kses( /* translators: %s - Link to the WPForms documentation page. */ __( 'Click the plus button, search for WPForms, click the block to<br>embed it. <a href="%s" target="_blank" rel="noopener noreferrer">Learn More</a>.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'rel' => [], 'target' => [], ], 'br' => [], ] ), 'https://wpforms.com/docs/creating-first-form/#display-form' ); ?> </p> <i class="wpforms-admin-form-embed-wizard-tooltips-red-arrow"></i> <?php else : ?> <h3><?php esc_html_e( 'Embed in a Page', 'wpforms-lite' ); ?></h3> <p><?php esc_html_e( 'Click the “Add Form” button, select your form, then add the embed code.', 'wpforms-lite' ); ?></p> <?php endif; ?> <button type="button" class="wpforms-admin-form-embed-wizard-done-btn"><?php esc_html_e( 'Done', 'wpforms-lite' ); ?></button> </div> </div> templates/admin/form-embed-wizard/popup.php 0000644 00000007661 15134366226 0015043 0 ustar 00 <?php /** * Form Embed Wizard. * Embed popup HTML template. * * @since 1.6.2 */ if ( ! \defined( 'ABSPATH' ) ) { exit; } $pages_exists = ! empty( $args['dropdown_pages'] ) ? 1 : 0; ?> <div id="wpforms-admin-form-embed-wizard-container" class="wpforms-admin-popup-container"> <div id="wpforms-admin-form-embed-wizard" class="wpforms-admin-popup" data-pages-exists="<?php echo esc_attr( $pages_exists ); ?>"> <div class="wpforms-admin-popup-content"> <h3><?php esc_html_e( 'Embed in a Page', 'wpforms-lite' ); ?></h3> <div id="wpforms-admin-form-embed-wizard-content-initial"> <p class="no-gap"><b><?php esc_html_e( 'We can help embed your form with just a few clicks!', 'wpforms-lite' ); ?></b></p> <?php if ( ! empty( $args['user_can_edit_pages'] ) ) : ?> <p><?php esc_html_e( 'Would you like to embed your form in an existing page, or create a new one?', 'wpforms-lite' ); ?></p> <?php endif; ?> </div> <?php if ( ! empty( $args['user_can_edit_pages'] ) ) : ?> <div id="wpforms-admin-form-embed-wizard-content-select-page" style="display: none;"> <p><?php esc_html_e( 'Select the page you would like to embed your form in.', 'wpforms-lite' ); ?></p> </div> <div id="wpforms-admin-form-embed-wizard-content-create-page" style="display: none;"> <p><?php esc_html_e( 'What would you like to call the new page?', 'wpforms-lite' ); ?></p> </div> <div id="wpforms-admin-form-embed-wizard-section-btns" class="wpforms-admin-popup-bottom"> <button type="button" data-action="select-page" class="wpforms-admin-popup-btn"><?php esc_html_e( 'Select Existing Page', 'wpforms-lite' ); ?></button> <button type="button" data-action="create-page" class="wpforms-admin-popup-btn"><?php esc_html_e( 'Create New Page', 'wpforms-lite' ); ?></button> </div> <div id="wpforms-admin-form-embed-wizard-section-go" class="wpforms-admin-popup-bottom wpforms-admin-popup-flex" style="display: none;"> <?php echo $args['dropdown_pages']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> <input type="text" id="wpforms-admin-form-embed-wizard-new-page-title" value="" placeholder="<?php esc_attr_e( 'Name Your Page', 'wpforms-lite' ); ?>"> <button type="button" data-action="go" class="wpforms-admin-popup-btn"><?php esc_html_e( 'Let’s Go!', 'wpforms-lite' ); ?></button> </div> <?php endif; ?> <div id="wpforms-admin-form-embed-wizard-section-toggles" class="wpforms-admin-popup-bottom"> <p class="secondary"> <?php printf( wp_kses( /* translators: %1$s - Video tutorial toggle CSS classes, %2$s - shortcode toggle CSS classes. */ __( 'You can also <a href="#" class="%1$s">embed your form manually</a> or <a href="#" class="%2$s">use a shortcode</a>', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'class' => [], ], ] ), 'tutorial-toggle wpforms-admin-popup-toggle', 'shortcode-toggle wpforms-admin-popup-toggle' ); ?> </p> <iframe style="display: none;" src="about:blank" frameborder="0" id="wpforms-admin-form-embed-wizard-tutorial" allowfullscreen width="450" height="256"></iframe> <div id="wpforms-admin-form-embed-wizard-shortcode-wrap" style="display: none;"> <input type="text" id="wpforms-admin-form-embed-wizard-shortcode" class="wpforms-admin-popup-shortcode" disabled /> <span id="wpforms-admin-form-embed-wizard-shortcode-copy" title="<?php esc_attr_e( 'Copy embed code to clipboard', 'wpforms-lite' ); ?>"> <i class="fa fa-files-o" aria-hidden="true"></i> </span> </div> </div> <div id="wpforms-admin-form-embed-wizard-section-goback" class="wpforms-admin-popup-bottom" style="display: none;"> <p class="secondary"> <a href="#" class="wpforms-admin-popup-toggle initialstate-toggle">« <?php esc_html_e( 'Go back', 'wpforms-lite' ); ?></a> </p> </div> </div> <i class="fa fa-times wpforms-admin-popup-close"></i> </div> </div> templates/admin/challenge/welcome.php 0000644 00000001313 15134366226 0013726 0 ustar 00 <?php /** * Challenge CTA on WPForms welcome activation screen HTML template. * * @since 1.6.2 */ if ( ! \defined( 'ABSPATH' ) ) { exit; } ?> <div class="challenge"> <div class="block"> <h1><?php esc_html_e( 'Take the WPForms Challenge', 'wpforms-lite' ); ?></h1> <h6><?php esc_html_e( 'Create your first form with our guided setup wizard in less than 5 minutes to experience the WPForms difference.', 'wpforms-lite' ); ?></h6> <div class="button-wrap"> <a href="<?php echo esc_url( admin_url( 'admin.php?page=wpforms-builder' ) ); ?>" class="wpforms-btn wpforms-btn-lg wpforms-btn-orange"> <?php esc_html_e( 'Start the WPForms Challenge', 'wpforms-lite' ); ?> </a> </div> </div> </div> templates/admin/challenge/modal.php 0000644 00000006470 15134366226 0013400 0 ustar 00 <?php /** * Challenge main modal window template. * * @since 1.6.2 * * @var string $state * @var integer $step * @var integer $minutes */ if ( ! \defined( 'ABSPATH' ) ) { exit; } ?> <div class="wpforms-challenge <?php echo 'start' === $state ? 'wpforms-challenge-start' : ''; ?>" data-wpforms-challenge-saved-step="<?php echo absint( $step ); ?>"> <div class="wpforms-challenge-list-block"> <i class="list-block-button toggle-list" title="<?php esc_attr_e( 'Toggle list', 'wpforms-lite' ); ?>"></i> <i class="list-block-button challenge-skip" title="<?php esc_attr_e( 'Skip challenge', 'wpforms-lite' ); ?>" data-cancel-title="<?php esc_attr_e( 'Cancel challenge', 'wpforms-lite' ); ?>"></i> <p> <?php echo wp_kses( sprintf( /* translators: %1$d - Number of minutes; %2$s - Single or plural word 'minute'. */ __( 'Complete the <b>WPForms Challenge</b> and get up and running within %1$d %2$s.', 'wpforms-lite' ), absint( $minutes ), _n( 'minute', 'minutes', absint( $minutes ), 'wpforms-lite' ) ), [ 'b' => [] ] ); ?> </p> <ul class="wpforms-challenge-list"> <li class="wpforms-challenge-step1-item"><?php esc_html_e( 'Name Your Form', 'wpforms-lite' ); ?></li> <li class="wpforms-challenge-step2-item"><?php esc_html_e( 'Select a Template', 'wpforms-lite' ); ?></li> <li class="wpforms-challenge-step3-item"><?php esc_html_e( 'Add Fields to Your Form', 'wpforms-lite' ); ?></li> <li class="wpforms-challenge-step4-item"><?php esc_html_e( 'Check Notifications', 'wpforms-lite' ); ?></li> <li class="wpforms-challenge-step5-item"><?php esc_html_e( 'Embed in a Page', 'wpforms-lite' ); ?></li> <li class="wpforms-challenge-completed"><?php esc_html_e( 'Challenge Complete', 'wpforms-lite' ); ?></li> </ul> </div> <div class="wpforms-challenge-bar" style="display:none"> <div></div> </div> <div class="wpforms-challenge-block-timer"> <img src="<?php echo esc_url( WPFORMS_PLUGIN_URL . 'assets/images/challenge/sullie-circle.png' ); ?>" alt="<?php esc_html_e( 'Sullie the WPForms mascot', 'wpforms-lite' ); ?>"> <div> <h3><?php esc_html_e( 'WPForms Challenge', 'wpforms-lite' ); ?></h3> <p> <?php printf( /* translators: %s - minutes in 2:00 format. */ esc_html__( '%s remaining', 'wpforms-lite' ), '<span id="wpforms-challenge-timer">' . absint( $minutes ) . ':00</span>' ); ?> </p> </div> </div> <div class="wpforms-challenge-block-under-timer"> <?php if ( 'start' === $state ) : ?> <a href="<?php echo esc_url( admin_url( 'admin.php?page=wpforms-builder' ) ); ?>" class="wpforms-btn wpforms-btn-md wpforms-btn-orange wpforms-challenge-start"> <?php esc_html_e( 'Start Challenge', 'wpforms-lite' ); ?> </a> <?php elseif ( 'progress' === $state ) : ?> <button type="button" class="wpforms-btn wpforms-btn-md wpforms-btn-grey wpforms-challenge-pause"><?php esc_html_e( 'Pause', 'wpforms-lite' ); ?></button> <button type="button" class="wpforms-btn wpforms-btn-md wpforms-btn-orange wpforms-challenge-resume" style="display: none;"><?php esc_html_e( 'Continue', 'wpforms-lite' ); ?></button> <button type="button" class="wpforms-btn wpforms-btn-md wpforms-btn-orange wpforms-challenge-end" style="display: none;"><?php esc_html_e( 'End Challenge', 'wpforms-lite' ); ?></button> <?php endif; ?> </div> </div> templates/admin/challenge/builder.php 0000644 00000004070 15134366226 0013724 0 ustar 00 <?php /** * Challenge HTML template specific to Form Builder. * * @since 1.6.2 */ if ( ! \defined( 'ABSPATH' ) ) { exit; } ?> <div class="wpforms-challenge-tooltips"> <div id="tooltip-content1"> <h3><?php esc_html_e( 'Name Your Form', 'wpforms-lite' ); ?></h3> <p><?php esc_html_e( 'Give your form a name so you can easily identify it.', 'wpforms-lite' ); ?></p> <button type="button" class="wpforms-challenge-step1-done wpforms-challenge-done-btn"><?php esc_html_e( 'Done', 'wpforms-lite' ); ?></button> </div> <div id="tooltip-content2"> <h3><?php esc_html_e( 'Select a Template', 'wpforms-lite' ); ?></h3> <p><?php esc_html_e( 'Build your form from scratch or use one of our pre-made templates.', 'wpforms-lite' ); ?></p> </div> <div id="tooltip-content3"> <p><?php esc_html_e( 'You can add additional fields to your form, if you need them.', 'wpforms-lite' ); ?></p> <button type="button" class="wpforms-challenge-step3-done wpforms-challenge-done-btn"><?php esc_html_e( 'Done', 'wpforms-lite' ); ?></button> </div> <div id="tooltip-content4"> <h3><?php esc_html_e( 'Check Notification Settings', 'wpforms-lite' ); ?></h3> <p><?php esc_html_e( 'The default notification settings might be sufficient, but double‑check to be sure.', 'wpforms-lite' ); ?></p> <button type="button" class="wpforms-challenge-step4-done wpforms-challenge-done-btn"><?php esc_html_e( 'Done', 'wpforms-lite' ); ?></button> </div> </div> <div class="wpforms-challenge-popup-container"> <div id="wpforms-challenge-welcome-builder-popup" class="wpforms-challenge-popup wpforms-challenge-popup-plain"> <div class="wpforms-challenge-popup-content"> <h3><?php esc_html_e( 'Welcome to the Form Builder', 'wpforms-lite' ); ?></h3> <p><?php esc_html_e( 'Our form builder is a full-screen, distraction-free experience where you manage your forms. The following steps will walk you through essential areas.', 'wpforms-lite' ); ?></p> <button type="button" class="wpforms-challenge-popup-btn"><?php esc_html_e( 'Let’s Go!', 'wpforms-lite' ); ?></button> </div> </div> </div> templates/admin/challenge/embed.php 0000644 00000011534 15134366226 0013355 0 ustar 00 <?php /** * Challenge HTML template specific to form embed page. * * @since 1.6.2 * * @var int $minutes * @var string $congrats_popup_footer Congrats popup footer HTML. */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <div class="wpforms-challenge-tooltips"> <div id="tooltip-content5"> <?php if ( wpforms_is_gutenberg_active() ) : // Gutenberg content. ?> <h3><?php esc_html_e( 'Add a Block', 'wpforms-lite' ); ?></h3> <p> <?php printf( wp_kses( /* translators: %s - Link to the WPForms documentation page. */ __( 'Click the plus button, search for WPForms, click the block to<br>embed it. <a href="%s" target="_blank" rel="noopener noreferrer">Learn More</a>.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'rel' => [], 'target' => [], ], 'br' => [], ] ), 'https://wpforms.com/docs/creating-first-form/#display-form' ); ?> </p> <i class="wpforms-challenge-tooltips-red-arrow"></i> <?php else : ?> <h3><?php esc_html_e( 'Embed in a Page', 'wpforms-lite' ); ?></h3> <p><?php esc_html_e( 'Click the “Add Form” button, select your form, then add the embed code.', 'wpforms-lite' ); ?></p> <?php endif; ?> <button type="button" class="wpforms-challenge-step5-done wpforms-challenge-done-btn"><?php esc_html_e( 'Done', 'wpforms-lite' ); ?></button> </div> </div> <div class="wpforms-challenge-popup-container"> <div id="wpforms-challenge-congrats-popup" class="wpforms-challenge-popup wpforms-challenge-popup-congrats"> <i class="wpforms-challenge-popup-close fa fa-times-circle fa-lg"></i> <div class="wpforms-challenge-popup-content"> <h3> <?php esc_html_e( 'Congrats, You Did It!', 'wpforms-lite' ); ?> <img src="<?php echo esc_url( WPFORMS_PLUGIN_URL . 'assets/images/challenge/party-popper.png' ); ?>" alt=""> </h3> <p> <?php echo wp_kses( sprintf( /* translators: %1$s - Number of minutes in HTML container; %2$s - Single or plural word 'minute'; %3$s - Number of seconds in HTML container; %4$s - Single or plural word 'second'; %5$s - 5 rating star symbols HTML. */ __( 'You completed the WPForms Challenge in <b>%1$s %2$s %3$s %4$s</b>. Share your success story with other WPForms users and help us spread the word <b>by giving WPForms a 5-star rating (%5$s) on WordPress.org</b>. Thanks for your support and we look forward to bringing you more awesome features.', 'wpforms-lite' ), '<span id="wpforms-challenge-congrats-minutes"></span>', _n( 'minute', 'minutes', absint( $minutes ), 'wpforms-lite' ), '<span id="wpforms-challenge-congrats-seconds"></span>', _n( 'second', 'seconds', absint( $minutes ), 'wpforms-lite' ), '<span class="rating-stars"><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i></span>' ), [ 'span' => [ 'id' => [], 'class' => [], ], 'b' => [], 'i' => [ 'class' => [], ], ] ); ?> </p> <a href="https://wordpress.org/support/plugin/wpforms-lite/reviews/?filter=5#new-post" class="wpforms-challenge-popup-btn wpforms-challenge-popup-rate-btn" target="_blank" rel="noopener"><?php esc_html_e( 'Rate WPForms on WordPress.org', 'wpforms-lite' ); ?> <span class="dashicons dashicons-external"></span></a> </div> <?php echo $congrats_popup_footer; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> </div> <div id="wpforms-challenge-contact-popup" class="wpforms-challenge-popup"> <div class="wpforms-challenge-popup-header wpforms-challenge-popup-header-contact"> <i class="wpforms-challenge-popup-close fa fa-times-circle fa-lg"></i> </div> <div class="wpforms-challenge-popup-content"> <form id="wpforms-challenge-contact-form"> <h3><?php esc_html_e( 'Help us improve WPForms', 'wpforms-lite' ); ?></h3> <p> <?php echo esc_html( sprintf( /* translators: %1$d - Number of minutes; %2$s - Single or plural word 'minute'. */ __( 'We\'re sorry that it took longer than %1$d %2$s to create a form. Our goal is to create the most beginner friendly WordPress form plugin. Please take a moment to let us know how we can improve WPForms.', 'wpforms-lite' ), absint( $minutes ), _n( 'minute', 'minutes', absint( $minutes ), 'wpforms-lite' ) ) ); ?> </p> <textarea class="wpforms-challenge-contact-message"></textarea> <label> <input type="checkbox" class="wpforms-challenge-contact-permission"><?php esc_html_e( 'Yes, I give WPForms permission to contact me for any follow up questions.', 'wpforms-lite' ); ?> </label> <button type="submit" class="wpforms-challenge-popup-btn wpforms-challenge-popup-contact-btn"><?php esc_html_e( 'Submit Feedback', 'wpforms-lite' ); ?></button> </form> </div> </div> </div> templates/admin/empty-states/no-forms.php 0000644 00000002533 15134366226 0014555 0 ustar 00 <?php /** * No forms HTML template. * * @since 1.6.2.3 */ if ( ! \defined( 'ABSPATH' ) ) { exit; } ?> <div class="wpforms-admin-empty-state-container wpforms-admin-no-forms"> <h2 class="waving-hand-emoji"><?php esc_html_e( 'Hi there!', 'wpforms-lite' ); ?></h2> <p><?php esc_html_e( 'It looks like you haven’t created any forms yet.', 'wpforms-lite' ); ?></p> <p><?php esc_html_e( 'You can use WPForms to build contact forms, surveys, payment forms, and more with just a few clicks.', 'wpforms-lite' ); ?></p> <img src="<?php echo esc_url( WPFORMS_PLUGIN_URL . 'assets/images/empty-states/no-forms.svg' ); ?>" alt=""/> <br> <?php if ( wpforms_current_user_can( 'create_forms' ) ) : ?> <a href="<?php echo esc_url( admin_url( 'admin.php?page=wpforms-builder' ) ); ?>" class="wpforms-btn add-new-h2 wpforms-btn-orange"><?php esc_html_e( 'Create Your Form', 'wpforms-lite' ); ?></a> <?php endif; ?> <p class="wpforms-admin-no-forms-footer"> <?php printf( wp_kses( /* translators: %s - URL to the documentation article. */ __( 'Need some help? Check out our <a href="%s" target="_blank" rel="noopener noreferrer">comprehensive guide</a>.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'target' => [], 'rel' => [], ], ] ), 'https://wpforms.com/docs/creating-first-form/' ); ?> </p> </div> templates/admin/notifications.php 0000644 00000003235 15134366226 0013227 0 ustar 00 <?php /** * Admin Notifications template. * * @since 1.7.5 * * @var array $notifications */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <div id="wpforms-notifications"> <div class="wpforms-notifications-header"> <div class="wpforms-notifications-bell"> <svg xmlns="http://www.w3.org/2000/svg" width="15" height="17" fill="none"> <path fill="#777" d="M7.68 16.56c1.14 0 2.04-.95 2.04-2.17h-4.1c0 1.22.9 2.17 2.06 2.17Zm6.96-5.06c-.62-.71-1.81-1.76-1.81-5.26A5.32 5.32 0 0 0 8.69.97H6.65A5.32 5.32 0 0 0 2.5 6.24c0 3.5-1.2 4.55-1.81 5.26a.9.9 0 0 0-.26.72c0 .57.39 1.08 1.04 1.08h12.38c.65 0 1.04-.5 1.07-1.08 0-.24-.1-.51-.3-.72Z"/> </svg> <span class="wp-ui-notification wpforms-notifications-circle"></span> </div> <div class="wpforms-notifications-title"><?php esc_html_e( 'Notifications', 'wpforms-lite' ); ?></div> </div> <div class="wpforms-notifications-body"> <a class="dismiss" title="<?php esc_attr_e( 'Dismiss this message', 'wpforms-lite' ); ?>"><i class="fa fa-times-circle" aria-hidden="true"></i></a> <?php if ( (int) $notifications['count'] > 1 ) : ?> <div class="navigation"> <a class="prev"> <span class="screen-reader-text"><?php esc_attr_e( 'Previous message', 'wpforms-lite' ); ?></span> <span aria-hidden="true">‹</span> </a> <a class="next"> <span class="screen-reader-text"><?php esc_attr_e( 'Next message', 'wpforms-lite' ); ?></span> <span aria-hidden="true">›</span> </a> </div> <?php endif; ?> <div class="wpforms-notifications-messages"> <?php echo $notifications['html']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> </div> </div> </div> templates/admin/settings/recaptcha-description.php 0000644 00000003210 15134366226 0016462 0 ustar 00 <p><?php esc_html_e( 'reCAPTCHA is a free anti-spam service from Google which helps to protect your website from spam and abuse while letting real people pass through with ease.', 'wpforms-lite' ); ?></p> <p><?php esc_html_e( 'Google offers 3 versions of reCAPTCHA (all supported within WPForms):', 'wpforms-lite' ); ?></p> <ul style="list-style: disc;margin-left: 20px;"> <li> <?php echo wp_kses( __( '<strong>v2 Checkbox reCAPTCHA</strong>: Prompts users to check a box to prove they\'re human.', 'wpforms-lite' ), [ 'strong' => [] ] ); ?> </li> <li> <?php echo wp_kses( __( '<strong>v2 Invisible reCAPTCHA</strong>: Uses advanced technology to detect real users without requiring any input.', 'wpforms-lite' ), [ 'strong' => [] ] ); ?> </li> <li> <?php echo wp_kses( __( '<strong>v3 reCAPTCHA</strong>: Uses a behind-the-scenes scoring system to detect abusive traffic, and lets you decide the minimum passing score. Recommended for advanced use only (or if using Google AMP).', 'wpforms-lite' ), [ 'strong' => [] ] ); ?> </li> </ul> <p><?php esc_html_e( 'Sites already using one type of reCAPTCHA will need to create new site keys before switching to a different option.', 'wpforms-lite' ); ?></p> <p> <?php printf( wp_kses( /* translators: %s - WPForms.com Setup reCAPTCHA URL. */ __( '<a href="%s" target="_blank" rel="noopener noreferrer">Read our walk through</a> to learn more and for step-by-step directions.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'target' => [], 'rel' => [], ], ] ), 'https://wpforms.com/docs/how-to-set-up-and-use-recaptcha-in-wpforms/' ); ?> </p> templates/admin/settings/hcaptcha-description.php 0000644 00000001456 15134366226 0016315 0 ustar 00 <p><?php esc_html_e( "hCaptcha is a free and privacy-oriented spam prevention service. Within your forms, hCaptcha will display a checkbox asking users to prove they're human (much like Google's v2 Checkbox reCAPTCHA). This is a simple step for legitimate site visitors, but is extremely effective at blocking spam.", 'wpforms-lite' ); ?></p> <p> <?php printf( wp_kses( /* translators: %s - WPForms.com Setup hCaptcha URL. */ __( 'For more details on how hCaptcha works, as well as a step by step setup guide, please check out our <a href="%s" target="_blank" rel="noopener noreferrer">documentation</a>.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'target' => [], 'rel' => [], ], ] ), 'https://wpforms.com/docs/how-to-set-up-and-use-hcaptcha-in-wpforms' ); ?> </p> templates/admin/forms/search-reset.php 0000644 00000000712 15134366226 0014066 0 ustar 00 <?php /** * Search reset block on forms overview page. * * @since 1.7.2 * * @var string $message Message to display inside the Search reset block. */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <div id="wpforms-reset-filter"> <?php echo wp_kses( $message, [ 'strong' => [], 'em' => [], ] ); ?> <i class="reset fa fa-times-circle" title="<?php esc_html_e( 'Clear search and return to All Forms', 'wpforms-lite' ); ?>"></i> </div> templates/admin/forms/search-box.php 0000644 00000001277 15134366226 0013543 0 ustar 00 <?php /** * Search box on forms overview page. * * @since 1.7.2 * * @var string $term_input_id Term input id. * @var string $text Button text. * @var string $search_term Current search term. */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <p class="search-box wpforms-forms-search-box"> <label class="screen-reader-text" for="<?php echo esc_attr( $term_input_id ); ?>"><?php echo esc_html( $text ); ?>:</label> <input type="search" name="search[term]" class="wpforms-forms-search-box-term" value="<?php echo esc_attr( $search_term ); ?>" id="<?php echo esc_attr( $term_input_id ); ?>"> <button type="submit" class="button"><?php echo esc_html( $text ); ?></button> </p> templates/admin/forms/bulk-edit-tags.php 0000644 00000002257 15134366226 0014323 0 ustar 00 <?php /** * Bulk Edit Tags on forms overview page. * * @since 1.7.5 * * @var int $columns Columns count. */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <tr class="wpforms-bulk-edit-tags wpforms-row-form wpforms-hidden"> <td colspan="<?php echo absint( $columns ); ?>"> <div class="wpforms-fbox"> <div class="wpforms-edit-forms"> <select multiple size="6"></select> </div> <div class="wpforms-edit-tags"> <select multiple size="1"></select> </div> </div> </td> </tr> <tr class="wpforms-bulk-edit-tags wpforms-row-buttons wpforms-hidden"> <td colspan="<?php echo absint( $columns ); ?>"> <button type="button" class="button wpforms-bulk-edit-tags-cancel"> <?php esc_html_e( 'Cancel', 'wpforms-lite' ); ?> </button> <button type="button" class="button button-primary wpforms-bulk-edit-tags-save"> <i class="wpforms-loading-spinner wpforms-loading-white wpforms-loading-inline wpforms-hidden"></i> <?php esc_html_e( 'Update', 'wpforms-lite' ); ?> </button> </td> </tr> <tr class="wpforms-bulk-edit-tags wpforms-row-message wpforms-hidden"> <td colspan="<?php echo absint( $columns ); ?>"> <div class="wpforms-message"></div> </td> </tr> templates/admin/pages/constant-contact.php 0000644 00000015017 15134366226 0014740 0 ustar 00 <?php /** * Constant Contact page template. * * @var string $sign_up_link Sign up link. * @var string $wpbeginners_guide_link Link to a WPBeginners blog post. */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <div class="wrap wpforms-admin-wrap wpforms-constant-contact-wrap"> <h1 class="page-title"><?php esc_html_e( 'Constant Contact', 'wpforms-lite' ); ?></h1> <div class="wpforms-admin-content"> <h2><?php esc_html_e( 'Grow Your Website with WPForms + Email Marketing', 'wpforms-lite' ); ?></h2> <p><?php esc_html_e( 'Wondering if email marketing is really worth your time?', 'wpforms-lite' ); ?></p> <p> <?php echo wp_kses( __( 'Email is hands-down the most effective way to nurture leads and turn them into customers, with a return on investment (ROI) of <strong>$44 back for every $1 spent</strong> according to DMA.', 'wpforms-lite' ), [ 'strong' => [] ] ); ?> </p> <p><?php esc_html_e( 'Here are 3 big reasons why every smart business in the world has an email list:', 'wpforms-lite' ); ?></p> <a href="<?php echo esc_url( $sign_up_link ); ?>" target="_blank" rel="noopener noreferrer" class="logo-link"> <?php printf( '<img src="%s" srcset="%s 2x" alt="" class="logo">', esc_url( WPFORMS_PLUGIN_URL . 'assets/images/constant-contact/cc-about-logo.png' ), esc_url( WPFORMS_PLUGIN_URL . 'assets/images/constant-contact/cc-about-logo@2x.png' ) ); ?> </a> <ol class="reasons"> <li> <?php echo wp_kses( __( '<strong>Email is still #1</strong> - At least 91% of consumers check their email on a daily basis. You get direct access to your subscribers, without having to play by social media\'s rules and algorithms.', 'wpforms-lite' ), [ 'strong' => [] ] ); ?> </li> <li> <?php echo wp_kses( __( '<strong>You own your email list</strong> - Unlike with social media, your list is your property and no one can revoke your access to it.', 'wpforms-lite' ), [ 'strong' => [] ] ); ?> </li> <li> <?php echo wp_kses( __( '<strong>Email converts</strong> - People who buy products marketed through email spend 138% more than those who don\'t receive email offers.', 'wpforms-lite' ), [ 'strong' => [] ] ); ?> </li> </ol> <p><?php esc_html_e( 'That\'s why it\'s crucial to start collecting email addresses and building your list as soon as possible.', 'wpforms-lite' ); ?></p> <p> <?php echo sprintf( wp_kses( /* translators: %s - WPBeginners.com Guide to Email Lists URL. */ __( 'For more details, see this guide on <a href="%s" target="_blank" rel="noopener noreferrer">why building your email list is so important</a>.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'target' => [], 'rel' => [], ], ] ), esc_url( $wpbeginners_guide_link ) ); ?> </p> <hr/> <h2><?php esc_html_e( 'You\'ve Already Started - Here\'s the Next Step (It\'s Easy)', 'wpforms-lite' ); ?></h2> <p><?php esc_html_e( 'Here are the 3 things you need to build an email list:', 'wpforms-lite' ); ?></p> <ol> <li><?php esc_html_e( 'A Website or Blog', 'wpforms-lite' ); ?> <span class="dashicons dashicons-yes"></span></li> <li><?php esc_html_e( 'High-Converting Form Builder', 'wpforms-lite' ); ?> <span class="dashicons dashicons-yes"></span></li> <li class="bold-marker"><strong><?php esc_html_e( 'The Best Email Marketing Service', 'wpforms-lite' ); ?></strong></li> </ol> <p><?php esc_html_e( 'With a powerful email marketing service like Constant Contact, you can instantly send out mass notifications and beautifully designed newsletters to engage your subscribers.', 'wpforms-lite' ); ?></p> <p> <a href="<?php echo esc_url( $sign_up_link ); ?>" class="button" target="_blank" rel="noopener noreferrer"> <?php esc_html_e( 'Get Started with Constant Contact for Free', 'wpforms-lite' ); ?> </a> </p> <p><?php esc_html_e( 'WPForms plugin makes it fast and easy to capture all kinds of visitor information right from your WordPress site - even if you don\'t have a Constant Contact account.', 'wpforms-lite' ); ?></p> <p><?php esc_html_e( 'But when you combine WPForms with Constant Contact, you can nurture your contacts and engage with them even after they leave your website. When you use Constant Contact + WPForms together, you can:', 'wpforms-lite' ); ?></p> <ul> <li><?php esc_html_e( 'Seamlessly add new contacts to your email list', 'wpforms-lite' ); ?></li> <li><?php esc_html_e( 'Create and send professional email newsletters', 'wpforms-lite' ); ?></li> <li><?php esc_html_e( 'Get expert marketing and support', 'wpforms-lite' ); ?></li> </ul> <p> <a href="<?php echo esc_url( $sign_up_link ); ?>" target="_blank" rel="noopener noreferrer"> <strong><?php esc_html_e( 'Try Constant Contact Today', 'wpforms-lite' ); ?></strong> </a> </p> <hr/> <h2><?php esc_html_e( 'WPForms Makes List Building Easy', 'wpforms-lite' ); ?></h2> <p><?php esc_html_e( 'When creating WPForms, our goal was to make a WordPress forms plugin that\'s both EASY and POWERFUL.', 'wpforms-lite' ); ?></p> <p><?php esc_html_e( 'We made the form creation process extremely intuitive, so you can create a form to start capturing emails within 5 minutes or less.', 'wpforms-lite' ); ?></p> <p><?php esc_html_e( 'Here\'s how it works.', 'wpforms-lite' ); ?></p> <div class="steps"> <?php foreach ( [ esc_html__( 'Select from our pre-built templates, or create a form from scratch.', 'wpforms-lite' ), esc_html__( 'Drag and drop any field you want onto your signup form.', 'wpforms-lite' ), esc_html__( 'Connect your Constant Contact email list.', 'wpforms-lite' ), esc_html__( 'Add your new form to any post, page, or sidebar.', 'wpforms-lite' ), ] as $index => $item ) { ++ $index; ?> <figure class="step"> <?php printf( '<div class="step-image-wrapper"><img src="%1$s" alt=""><a href="%1$s" class="hover" data-lity></a></div><figcaption>%2$d. %3$s</figcaption>', esc_url( WPFORMS_PLUGIN_URL . 'assets/images/constant-contact/cc-about-step' . $index . '.png' ), absint( $index ), esc_html( $item ) ); ?> </figure> <?php } ?> </div> <p><?php esc_html_e( 'It doesn\'t matter what kind of business you run, what kind of website you have, or what industry you are in - you need to start building your email list today.', 'wpforms-lite' ); ?></p> <p><strong><?php esc_html_e( 'With Constant Contact + WPForms, growing your list is easy.', 'wpforms-lite' ); ?></strong></p> </div> </div> templates/admin-bar-menu.php 0000644 00000003703 15134366226 0012062 0 ustar 00 <?php /** * Forms selector for admin bar menu. * * @since 1.6.5 * * @var array $forms_data Forms data. */ if ( ! defined( 'ABSPATH' ) ) { exit; } $has_notifications = $forms_data['has_notifications'] ? ' wpforms-menu-form-notifications' : ''; end( $forms_data['forms'] ); $last_key = key( $forms_data['forms'] ); ?> <script type="text/html" id="tmpl-wpforms-admin-menubar-data"> <?php foreach ( $forms_data['forms'] as $key => $form ) : ?> <li id="wp-admin-bar-wpforms-form-id-<?php echo esc_attr( $form['form_id'] ); ?>" class="menupop wpforms-menu-form<?php echo $key === 0 ? esc_attr( $has_notifications ) : ''; ?><?php echo $key === $last_key ? ' wpforms-menu-form-last' : ''; ?>"> <div class="ab-item ab-empty-item" aria-haspopup="true"><span class="wp-admin-bar-arrow" aria-hidden="true"></span><?php echo esc_html( $form['title'] ); ?></div> <div class="ab-sub-wrapper"> <ul id="wp-admin-bar-wpforms-form-id-<?php echo esc_attr( $form['form_id'] ); ?>-default" class="ab-submenu"> <?php if ( ! empty( $form['edit_url'] ) ) : ?> <li id="wp-admin-bar-wpforms-form-id-<?php echo esc_attr( $form['form_id'] ); ?>-edit"> <a class="ab-item" href="<?php echo esc_url( $form['edit_url'] ); ?>"><?php echo esc_html( $forms_data['edit_text'] ); ?></a> </li> <?php endif; ?> <?php if ( ! empty( $form['entries_url'] ) ) : ?> <li id="wp-admin-bar-wpforms-form-id-<?php echo esc_attr( $form['form_id'] ); ?>-entries"> <a class="ab-item" href="<?php echo esc_url( $form['entries_url'] ); ?>"><?php echo esc_html( $forms_data['entry_text'] ); ?></a> </li> <?php endif; ?> <?php if ( ! empty( $form['survey_url'] ) ) : ?> <li id="wp-admin-bar-wpforms-form-id-<?php echo esc_attr( $form['form_id'] ); ?>-survey"> <a class="ab-item" href="<?php echo esc_url( $form['survey_url'] ); ?>"><?php echo esc_html( $forms_data['survey_text'] ); ?></a> </li> <?php endif; ?> </ul> </div> </li> <?php endforeach; ?> </script> templates/integrations/elementor/popup.php 0000644 00000000612 15134366226 0015125 0 ustar 00 <?php /** * Forms builder popup inside Elementor page builder. * * @since 1.6.2 */ if ( ! \defined( 'ABSPATH' ) ) { exit; } ?> <script type="text/html" id="tmpl-wpforms-builder-elementor-popup"> <div id="wpforms-builder-elementor-popup" style="display:none;"> <iframe src="about:blank" width="100%" height="100%" frameborder="0" id="wpforms-builder-iframe"></iframe> </div> </script> templates/integrations/elementor/form-selector.php 0000644 00000001047 15134366226 0016546 0 ustar 00 <?php /** * Forms selector for Elementor page builder. * * @since 1.6.2 * * @var string $forms Rendered <option>s for the select tag. */ if ( ! \defined( 'ABSPATH' ) ) { exit; } ?> <div class="wpforms-elementor wpforms-elementor-form-selector"> <img src="<?php echo esc_url( WPFORMS_PLUGIN_URL . 'assets/images/integrations/elementor/wpforms-logo.svg' ); ?>" alt="WPForms Logo"/> <div class="select-wrapper"> <select> <?php echo $forms; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> </select> </div> </div> templates/integrations/elementor/no-forms.php 0000644 00000002032 15134366226 0015520 0 ustar 00 <?php /** * No forms template. * * @since 1.6.2 */ if ( ! \defined( 'ABSPATH' ) ) { exit; } ?> <div class="wpforms-admin-empty-state-container wpforms-elementor-no-forms"> <img src="<?php echo esc_url( WPFORMS_PLUGIN_URL . 'assets/images/empty-states/no-forms.svg' ); ?>" alt=""/> <p> <?php echo wp_kses( __( 'You can use <b>WPForms</b> to build contact forms, surveys, payment forms, and more with just a few clicks.', 'wpforms-lite' ), [ 'b' => [] ] ); ?> </p> <button type="button" class="wpforms-btn"><?php esc_html_e( 'Create a form', 'wpforms-lite' ); ?></button> <p class="wpforms-admin-no-forms-footer"> <?php printf( wp_kses( /* translators: %s - URL to the documentation article. */ __( 'Need some help? Check out our <a href="%s" target="_blank" rel="noopener noreferrer">comprehensive guide</a>.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'target' => [], 'rel' => [], ], ] ), 'https://wpforms.com/docs/creating-first-form/' ); ?> </p> </div> templates/education/admin/settings/geolocation/heading.php 0000644 00000001555 15134366226 0020076 0 ustar 00 <?php /** * Heading for geolocation settings page. * * @since 1.6.6 * * @var bool $plugin_allow Allow using plugin. */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <h4> <?php esc_html_e( 'Geolocation', 'wpforms-lite' ); ?> <?php if ( ! $plugin_allow ) { ?> <img src="<?php echo esc_url( WPFORMS_PLUGIN_URL . 'assets/images/lite-settings-access/pro-plus.svg' ); ?>" alt="<?php esc_attr_e( 'Pro+', 'wpforms-lite' ); ?>" > <?php } ?> </h4> <p><?php esc_html_e( 'Do you want to learn more about visitors who fill out your online forms? Our geolocation addon allows you to collect and store your website visitors geolocation data along with their form submission. This insight can help you to be better informed and turn more leads into customers. Furthermore, add a smart address field that autocompletes using the Google Places API.', 'wpforms-lite' ); ?></p> templates/education/admin/settings/geolocation/screenshots.php 0000644 00000002215 15134366226 0021031 0 ustar 00 <?php /** * Screenshots for geolocation settings page. * * @since 1.6.6 */ if ( ! defined( 'ABSPATH' ) ) { exit; } $images_url = WPFORMS_PLUGIN_URL . 'assets/images/geolocation-education/'; $screenshots = [ [ 'url' => $images_url . 'entry-location.jpg', 'url2x' => $images_url . 'entry-location@2x.jpg', 'title' => __( 'Location Info in Entries', 'wpforms-lite' ), ], [ 'url' => $images_url . 'address-autocomplete.jpg', 'url2x' => $images_url . 'address-autocomplete@2x.jpg', 'title' => __( 'Address Autocomplete Field', 'wpforms-lite' ), ], [ 'url' => $images_url . 'smart-address-field.jpg', 'url2x' => $images_url . 'smart-address-field@2x.jpg', 'title' => __( 'Smart Address Field', 'wpforms-lite' ), ], ]; foreach ( $screenshots as $screenshot ) { ?> <div class="cont"> <img src="<?php echo esc_url( $screenshot['url'] ); ?>" alt="<?php echo esc_attr( $screenshot['title'] ); ?>" /> <a href="<?php echo esc_url( $screenshot['url2x'] ); ?>" class="hover" data-lity data-lity-desc="<?php echo esc_attr( $screenshot['title'] ); ?>"></a> <span><?php echo esc_html( $screenshot['title'] ); ?></span> </div> <?php } templates/education/admin/settings/geolocation/caps.php 0000644 00000001467 15134366226 0017427 0 ustar 00 <?php /** * Capabilities for geolocation settings page. * * @since 1.6.6 */ if ( ! defined( 'ABSPATH' ) ) { exit; } $lists = [ [ esc_html__( 'City', 'wpforms-lite' ), esc_html__( 'Country', 'wpforms-lite' ), esc_html__( 'Postal/Zip Code', 'wpforms-lite' ), ], [ esc_html__( 'Latitude/Longitude', 'wpforms-lite' ), esc_html__( 'Address Autocomplete', 'wpforms-lite' ), esc_html__( 'Embedded Map in Forms', 'wpforms-lite' ), ], [ esc_html__( 'Google Places API', 'wpforms-lite' ), esc_html__( 'Mapbox API', 'wpforms-lite' ), ], ]; ?> <p><?php esc_html_e( 'Powerful location-based insights and features…', 'wpforms-lite' ); ?></p> <?php foreach ( $lists as $list ) { ?> <ul> <?php foreach ( $list as $item ) { ?> <li><?php echo esc_html( $item ); ?></li> <?php } ?> </ul> <?php } ?> templates/education/admin/settings/geolocation/submit.php 0000644 00000002555 15134366226 0020003 0 ustar 00 <?php /** * Button for geolocation settings page. * * @since 1.6.6 * * @var string $action Is plugin installed? * @var string $path Plugin file. * @var string $url URL for download plugin. * @var bool $plugin_allow Allow using plugin. */ if ( ! defined( 'ABSPATH' ) ) { exit; } if ( $plugin_allow && $action === 'activate' ) { ?> <button class="status-inactive wpforms-btn wpforms-btn-lg wpforms-btn-blue wpforms-education-toggle-plugin-btn" data-type="addon" data-action="<?php echo esc_attr( $action ); ?>" data-plugin="<?php echo esc_attr( $path ); ?>"> <i></i><?php esc_html_e( 'Activate', 'wpforms-lite' ); ?> </button> <?php } elseif ( $plugin_allow && $action === 'install' ) { ?> <button class="status-download wpforms-btn wpforms-btn-lg wpforms-btn-blue wpforms-education-toggle-plugin-btn" data-type="addon" data-action="<?php echo esc_attr( $action ); ?>" data-plugin="<?php echo esc_url( $url ); ?>"> <i></i><?php esc_html_e( 'Install & Activate', 'wpforms-lite' ); ?> </button> <?php } else { ?> <a href="<?php echo esc_url( wpforms_admin_upgrade_link( 'settings-license', 'Geolocation%20Addon' ) ); ?>" target="_blank" rel="noopener noreferrer" class="wpforms-upgrade-modal wpforms-btn wpforms-btn-lg wpforms-btn-orange"> <?php esc_html_e( 'Upgrade to WPForms Pro', 'wpforms-lite' ); ?> </a> <?php } templates/fields/number-slider/frontend.php 0000644 00000002146 15134366226 0015123 0 ustar 00 <?php /** * Number slider field frontend template. * * @var array $atts Additional HTML attributes. * @var array $class HTML classes. * @var array $datas Data attributes. * @var float $default_value Default field value. * @var float $max Upper range limit. * @var float $min Lower range limit. * @var float $step Allowed step. * @var string $id Element ID. * @var string $required Is field required or not. * @var string $value_display Value output. * @var string $value_hint Value hint output. */ if ( ! defined( 'ABSPATH' ) ) { exit; } ?> <input type="range" <?php wpforms_html_attributes( $id, $class, $datas, $atts, true ); ?> <?php echo ! empty( $required ) ? 'required' : ''; ?> value="<?php echo esc_attr( $default_value ); ?>" min="<?php echo esc_attr( $min ); ?>" max="<?php echo esc_attr( $max ); ?>" step="<?php echo esc_attr( $step ); ?>"> <div class="wpforms-field-number-slider-hint" data-hint="<?php echo esc_attr( wp_kses_post( $value_display ) ); ?>"> <?php echo wp_kses_post( $value_hint ); ?> </div> templates/fields/number-slider/builder-preview.php 0000644 00000000767 15134366226 0016420 0 ustar 00 <input type="range" readonly class="wpforms-number-slider" id="wpforms-number-slider-<?php echo (int) $field_id; ?>" value="<?php echo (float) $default_value; ?>" min="<?php echo (float) $min; ?>" max="<?php echo (float) $max; ?>" step="<?php echo (float) $step; ?>"> <div id="wpforms-number-slider-hint-<?php echo (int) $field_id; ?>" data-hint="<?php echo esc_attr( wp_kses_post( $value_display ) ); ?>" class="wpforms-number-slider-hint"> <?php echo wp_kses_post( $value_hint ); ?> </div> templates/fields/number-slider/builder-option-min-max.php 0000644 00000000743 15134366226 0017605 0 ustar 00 <div class="wpforms-input-row"> <div class="minimum"> <?php echo $input_min; // phpcs:ignore ?> <label for="wpforms-field-option-<?php echo (int) $field_id; ?>-min" class="sub-label"><?php esc_html_e( 'Minimum', 'wpforms-lite' ); ?></label> </div> <div class="maximum"> <?php echo $input_max; // phpcs:ignore ?> <label for="wpforms-field-option-<?php echo (int) $field_id; ?>-max" class="sub-label"><?php esc_html_e( 'Maximum', 'wpforms-lite' ); ?></label> </div> </div> templates/fields/internal-information/icon-expanded.php 0000644 00000000777 15134366226 0017421 0 ustar 00 <?php /** * Expanded icon for Internal Information Field. * * @since 1.7.6 */ ?> <span class="icon expanded"> <svg viewBox="0 0 10 7"> <path d="M5.83984 0.625C5.56641 0.378906 5.15625 0.378906 4.91016 0.625L1.19141 4.34375C0.917969 4.61719 0.917969 5.02734 1.19141 5.27344L1.79297 5.90234C2.06641 6.14844 2.47656 6.14844 2.72266 5.90234L5.375 3.25L8 5.90234C8.24609 6.14844 8.68359 6.14844 8.92969 5.90234L9.55859 5.27344C9.80469 5.02734 9.80469 4.61719 9.55859 4.34375L5.83984 0.625Z"/> </svg> </span> templates/fields/internal-information/icon-lightbulb.php 0000644 00000001526 15134366226 0017576 0 ustar 00 <?php /** * Light bulb icon for Internal Information Field. * * @since 1.7.6 */ ?> <div class="internal-information-lightbulb"> <svg viewBox="0 0 14 20"> <path d="M3.75 17.97c0 .12 0 .23.08.35l.97 1.4c.12.2.32.28.51.28H8.4c.2 0 .39-.08.5-.27l.98-1.41c.04-.12.08-.23.08-.35v-1.72H3.75v1.72Zm3.13-5.47c.66 0 1.25-.55 1.25-1.25 0-.66-.6-1.25-1.26-1.25-.7 0-1.25.59-1.25 1.25 0 .7.55 1.25 1.25 1.25Zm0-12.5A6.83 6.83 0 0 0 0 6.88c0 1.75.63 3.32 1.68 4.53.66.74 1.68 2.3 2.03 3.59H5.6c0-.16 0-.35-.08-.55-.2-.7-.86-2.5-2.42-4.25a5.19 5.19 0 0 1-1.21-3.32c-.04-2.86 2.3-5 5-5 2.73 0 5 2.26 5 5 0 1.2-.47 2.38-1.26 3.32a11.72 11.72 0 0 0-2.42 4.25c-.07.2-.07.35-.07.55H10a10.56 10.56 0 0 1 2.03-3.6A6.85 6.85 0 0 0 6.88 0Zm-.4 8.75h.75c.3 0 .58-.23.62-.55l.5-3.75a.66.66 0 0 0-.62-.7H5.98a.66.66 0 0 0-.63.7l.5 3.75c.05.32.32.55.63.55Z"/> </svg> </div> templates/fields/internal-information/icon-not-expanded.php 0000644 00000001003 15134366226 0020176 0 ustar 00 <?php /** * Not expanded icon for Internal Information Field. * * @since 1.7.6 */ ?> <span class="icon not-expanded"> <svg viewBox="0 0 10 7"> <path d="M4.91016 5.90234C5.15625 6.14844 5.56641 6.14844 5.8125 5.90234L9.53125 2.18359C9.80469 1.91016 9.80469 1.5 9.53125 1.25391L8.92969 0.625C8.65625 0.378906 8.24609 0.378906 8 0.625L5.34766 3.27734L2.72266 0.625C2.47656 0.378906 2.06641 0.378906 1.79297 0.625L1.19141 1.25391C0.917969 1.5 0.917969 1.91016 1.19141 2.18359L4.91016 5.90234Z"/> </svg> </span> changelog.txt 0000644 00000206370 15134366226 0007254 0 ustar 00 == Changelog == = 1.7.6 = - Added: Form Submissions can now be checked against the Akismet API to prevent spam. - Changed: Empty post titles and term names in Dynamic Choices are now treated the way WordPress does. - Changed: Modern Dropdown field fuzzy search sensitivity is adjusted to display only exact matches. - Changed: Allow typing choices in the modern Dropdown field with the Multiple Options Selection option enabled. - Changed: WPForms Challenge experience is improved for new users. - Changed: Lite Connect is now disabled in non-production environments. - Changed: Lite Connect functionality improves handling of staging and cloned sites, and changed domain names. - Changed: Unnecessary PHP packages are no longer shipped in WPForms Lite. - Changed: Stylesheets loaded in the Form Builder and on certain plugin pages are better optimized and shrank to improve performance. - Changed: WPForms now better integrates with the WP Mail SMTP plugin to enable overriding From Name and From Email values in existing forms. - Changed: Form Notifications now have better validation of From Email settings. - Changed: Start using new `elementor/widgets/register` hook introduced in Elementor 3.5.0. - Changed: Updated DOMPurify library to 2.3.10. - Changed: Updated jquery.validate library to 1.19.5. - Fixed: Improved compatibility with Twenty Twenty-Two theme. - Fixed: Added meaningful `alt` text to form submission spinner image to stop being flagged by certain SEO scanners. - Fixed: Constant Contact Authorization Code and Account Nickname fields are now required on the Settings > Integrations page. - Fixed: Constant Contact connection can now be added even if the Authorization Code is invalid. - Fixed: Validation of required fields on Marketing section in the Form Builder was triggered even if the field is hidden. - Fixed: Action Scheduler was triggering a PHP fatal error on the Tools > Scheduled Actions page on PHP 5.6. - Fixed: Images breaking out of containers on smaller screens if Multiple Choice and Checkboxes fields were set to use image choices. - Fixed: `query_var` smart tag was not working in Confirmations and Notifications. - Fixed: Custom templates had an incorrect badge, "Addon" instead of "Custom". - Fixed: The Confirmation Message label overlapped the editor when WYSIWYG mode was disabled. - Fixed: Default form title was not changed when switching form templates. - Fixed: Both `page_title` and `page_id` smart tags were returning incorrect values on non-singular pages if the form was used outside the Loop. - Fixed: WPForms Block preview (on block hover) was rendered incorrectly in Site Editor. - Fixed: Custom validation errors were not displayed with hCaptcha enabled upon AJAX form submission. - Fixed: Validation errors were not shown when the field with an input mask was not fully filled. - Fixed: Smart Tags could be added to Sender Email and Sender Name if the fields were managed by the WP Mail SMTP plugin. - Fixed: The Confirmation message block had incorrect margins in the Twenty Twenty-Two theme. - Fixed: Occasional errors during migration were fixed when upgrading from some older versions of WPForms. - Fixed: The Confirmation Redirect URL can no longer be saved with an empty value. - Fixed: Default choices were displayed on the frontend if a Dynamic Choices source had no objects (Dropdown, Multiple Choice, and Checkboxes fields were affected). = 1.7.5.5 = - Fixed: Migrations logic was broken in certain cases when addons have their own migrations. - Fixed: Security-related improvements around email generation for notifications. = 1.7.5.3 = - Added: New filter to modify CSS classes of the form submit button on the frontend. - Changed: Improve cached templates handling in the Form Builder. - Fixed: Retrieving a current URL should not strip a custom port. - Fixed: "JavaScript file not found" error when the "Load Assets Globally" option was enabled in Settings > General. - Fixed: Do not cache an incorrect or empty response from the Templates API. = 1.7.5.2 = - Fixed: Increase chances for the templates inside the Form Builder to load properly, so occasional empty form creation from a template should be gone. - Fixed: PHP fatal error was generated in some cases when Lite Connect attempted to generate site key too many times. = 1.7.5.1 = - Fixed: v1.7.5 migration did not complete when a database prefix other than `wp_` was used. - Fixed: Incorrect Form Tags links to filter by tags were generated right after saving tags. = 1.7.5 = - Added: Form Tags: add tags to forms with an ability to filter by them; bulk add/edit/delete tags for multiple forms. - Added: Display the status of the Lite Connect setting and the date-time when it was enabled (Tools > System Info). - Added: New `{unique_value}` smart tag. - Changed: The sodium library is now included in WordPress core, so we removed it from the plugin. - Changed: Action Scheduler library was updated to 3.4.2 to fix deprecation notices with PHP 8.1. - Changed: The jquery.validate library updated to 1.19.4. - Changed: Conditional logic can now be applied to custom fields. - Changed: Do not allow not completed Challenge to appear in the regular Form Builder. - Fixed: For some fields, their default values were not always previewed in the Form Builder. - Fixed: Regularly clean up additional information we store for each task we run within the plugin. - Fixed: No fatal error anymore in Allow/Deny email lists with very long or international emails. - Fixed: Correctly handle additional CSS classes for each WPForms block on the same page (Block Editor). - Fixed: Modals order was incorrect when the Lite Connect feature was enabled or disabled on mobile. - Fixed: Notification for the last step of the WPForms Challenge was not displayed on the Posts Page with the Gutenberg plugin. - Fixed: Some Form Templates could be empty upon fresh installation. - Fixed: Several minor issues in the Challenge flow are now fixed. - Fixed: Color Palette was not shown in the Form Builder for duplicated fields. - Fixed: Do not register Gutenberg block styles on the front end when no form is present on a page. - Fixed: Limit the number of attempts to get the site key in Lite Connect. - Fixed: Multiple Items (Radio) choice showed "Empty" on a single entry page if a selected choice value is undefined/empty. - Fixed: Added focus state indication for admin tabs. - Fixed: GDPR sub-settings remained enabled if GDPR is disabled and sub-setting was left enabled. - Fixed: Duplicate/Trash form actions did not work after sorting forms by Name, Author, or Created Date. - Fixed: Notices appeared in the debug.log when the user created a Custom Template and used it in the Form Builder. - Fixed: hCaptcha pointer had a weird thick dark border since WordPress 6.0. - Fixed: Check GDPR settings before trying to use a cookie. = 1.7.4.2 = - Changed: DOMPurify library updated to 2.3.8. - Fixed: WordPress 6.0 compatibility - WPForms block styling fixed inside the Full Site Editor. - Fixed: Lite Connect: submitted form entries counting improved. = 1.7.4.1 = - Fixed: LiteConnect auth key request didn't work with plain permalinks and with subdirectory install. - Fixed: Form Locations compatibility with the Full Site Editor template parts. = 1.7.4 = - Added: Form Locations! On the Forms Overview page easily check all places where each form is currently embedded. - Added: Back up form submissions into the cloud and restore them to your database as Entries after upgrading to a paid plan. - Changed: Improved text wrapping of field labels and descriptions. - Changed: Each smart tag inserted by a user in the Form Builder will now be placed as the last one in relevant inputs. - Changed: The input field in the Form Embed wizard popup in the Form Builder is now focused by default. - Changed: Updated DOMPurify lib to 2.3.6. - Fixed: Search result was not reset when the user clicked "x" sign in the search field on the Addons page. - Fixed: The form could be saved while still adding a field, but it should not. - Fixed: Improved compatibility with Elementor popups. - Fixed: Cleaned up deprecation notice for `_register_controls()` with recent Elementor versions. = 1.7.3 = - IMPORTANT: Support for PHP 5.5 has been discontinued. If you are running PHP 5.5, you MUST upgrade PHP before installing WPForms 1.7.3. Failure to do that will disable WPForms core functionality. - IMPORTANT: Support for WordPress 5.1 has been discontinued. If you are running WordPress 5.1, you MUST upgrade WordPress before installing WPForms 1.7.3. Failure to do that will disable WPForms core functionality. - Added: Forms now can be moved to Trash and restored on the Forms Overview page. - Added: Forms now support Revisions with new UI and ability to switch between them. - Added: Form Template Export selection on the Tools > Export page now supports search. - Changed: Improved support for WordPress Core UI colors and admin themes in the admin notifications panel. - Changed: Improved submitted email field value validation (take into account real-world usage and RFC information). - Changed: Updated Action Scheduler library to 3.4.0. - Changed: Hide Sub-Labels option should be hidden for some formats in the Name field. - Changed: Improved performance of Action Scheduler tasks. - Changed: Drop jQuery matchHeight library in favor of a CSS solution. - Changed: Unified and improved modals across all plugin pages and the Form Builder. - Changed: Forms now can be deleted when the user who created them is deleted. - Fixed: Long field titles didn't wrap within the field container. - Fixed: Stuck on loading the Form Builder when switching to a new form template with unsaved changes and dismissing the native browser prompt. - Fixed: Buttons had no spacing when the Embed button is not available for a user without the capability to edit pages and/or posts. - Fixed: Incorrect position of the notification counter in the admin bar when a notification was dismissed. - Fixed: Make the form Submit button disabled all the time after the submit action when AJAX form submission or confirmation redirect are enabled. - Fixed: Toggle control labels did not have a hand cursor. - Fixed: The dropdown list was shown partially when located at the end of the form in the Twenty Twenty theme. - Fixed: Multiple selected options in the Classic Dropdown field didn't have a visual active state. - Fixed: Deprecation notice when processing smart tags. - Fixed: False JavaScript issue error when WP Rocket's Delay JavaScript execution option is on. - Fixed: PHP notice generated when email notifications were sent. - Fixed: "Did You Know" block now always spaned across all columns. - Fixed: Validation error if an email was not required and left empty. - Fixed: Email field validation failed with long and invalid emails. - Fixed: Import from other plugins. - Fixed: Compatibility with PHP 8.1. = 1.7.2.1 = - Fixed: Compatibility with PHP 8.0 and PHP 8.1. - Fixed: Compatibility with WordPress 5.9, including its new Full Site Editing feature. - Fixed: Broken cache directory path if `WP_CONTENT_DIR` is set in the `wp-config.php` without trailing slash. - Fixed: PHP Notice when using the `wpforms_log()` function in certain conditions. - Fixed: Type mismatch brakes a list of scheduled actions in Action Scheduler if typed arguments are passed. = 1.7.2 = - Added: Search by form name and description is available on the Forms Overview page. - Added: New "Author" column in the Forms Overview table to display a name of a person who created the form. - Changed: Adjusted an error message for the Locked Field modal when attempting to delete required form fields. - Changed: Hide image choice style options if image choices are not enabled. - Changed: Improved sanitization for Page and Form IDs in Form embed wizard popup. - Changed: Adjusted Weekly Summary email text for Lite users. - Changed: Updated the WPForms > About Us page. - Changed: Updated jQuery inputmask lib to 5.0.7-beta29. - Changed: Updated DOMPurify lib to 2.3.4. - Fixed: Missing search docs in the Form Builder Help. - Fixed: Display empty table instead of empty state screen for Unread (0), Starred (0), Abandoned (0), etc., views. - Fixed: Media modal 'Actions' menu was missing when using the Divi Builder. - Fixed: PHP notice was generated on a form preview if a page template is changed. - Fixed: Correctly handle the legacy widget options (show/hide form title and description) on the front-end. - Fixed: If a form with configured Google reCAPTCHA v3 is submitted after 2 minutes, there was an error "Google reCAPTCHA verification failed, please try again later." - Fixed: Better compatibility for From Name and From Email fields in the Form Builder > Notifications screen when the WP Mail SMTP plugin forces those values. - Fixed: PHP warning occurred when the `%` symbol is used inside some Form Builder settings. - Fixed: Form Preview didn't work properly on the upcoming Twenty Twenty-Two theme. - Fixed: PHP timeout occurred in the Form Builder when large multi-level term taxonomies were used as dynamic choices for Checkboxes/Multiple Choices/Dropdown fields. - Fixed: PHP fatal error generated in some cases when Site Health information was displayed. - Fixed: WP.com VIP clients used to have caching issues with external data. - Fixed: WooCommerce product import (CSV) to update existing products wasn't updating product images while WPForms was active. - Fixed: Form couldn't be submitted on the Lite version of the plugin when it contained the Page Break field from the paid version. = 1.7.1.2 = - Fixed: Edge case when form tokens (anti-spam protection) failed verification at certain time of a new day. = 1.7.1.1 = - Changed: Improved translations by removing confusion if non-translatable placeholders are used. - Changed: Improved support for WordPress Core UI colors and admin themes in the admin bar menu. - Changed: Improved display of empty and hidden field labels in Form Builder preview. - Changed: Field helper notification in the Form Builder now can be dismissed. - Changed: Improved and standardized look of classic and modern Dropdown field across Form Builder, admin area, and frontend. - Fixed: Strip slashes from Paragraph Text field when the value is dynamically populated. - Fixed: SMTP settings page linked to Setup Wizard even when SMTP settings are already configured. - Fixed: Notifications count in the admin bar is misaligned. - Fixed: Field helper notification in the Form Builder overlaps and blocks Duplicate and Delete actions when hovered. - Fixed: Non-latin (Punycode) email addresses are not converted for display in email suggestion hints. = 1.7.0 = - Added: Uncanny Automator integration. - Changed: Updated jQuery Validation library to v1.9.3. - Fixed: Incorrect handling of language files downloads when the plugin is activated, or site language is changed. - Fixed: Alignment for admin notification counter. - Fixed: Javascript error in Elementor page builder. - Fixed: Embedded forms into global sidebar report about an error in the Divi page builder. - Fixed: Change settings were not applied for a Duplicated Modern Dropdown field. - Fixed: Form fields not displaying full width on mobile devices with Base form styling selected. = 1.6.9 = - Added: Keyboard Shortcuts informational popup in the Form Builder, triggered with `Ctrl + /` shortcut. - Added: Separate category for templates added by addons. - Added: Smart Tags support in Confirmation Messages. - Added: Punycode support for the Email field to allow using international domain names. - Added: Compatibility with PHP 8. - Changed: Display only WPForms related actions on the Tools > Scheduled Actions page. - Changed: Enable AJAX form submission by default for new forms created using Blank template and addon templates. - Changed: Default state on the CAPTCHA Settings screen on new installs is now set to None. - Changed: Improved consistency of various modal popups in the Form Builder. - Changed: Speed up form preview in the Form Builder by limiting the number of choices displayed. - Changed: Updated ActionScheduler library to 3.2.1. - Fixed: Missing down arrow in the Dropdown field in the Twenty Twenty-One theme on a fresh install. - Fixed: Clicking on the Field Options tab in the Form Builder always opens options for the first field in the form. - Fixed: Form Setting panels can be broken by horizontally resizing textarea fields. - Fixed: Insert/edit link button not working in the Confirmation Message editor. - Fixed: Prevent editor styles from loading on various settings pages. - Fixed: Missing Conditional Logic class in the Lite version causing errors when using custom integration that extends the `WPForms_Provider` class. - Fixed: Console error in Chrome when re-ordering choices in the Dropdown, Checkboxes and Multiple Choice field settings. - Fixed: Unrelated admin notices are no longer displayed on the WPForms admin pages. - Fixed: Modern Dropdown field not initialized properly in the Divi Builder. - Fixed: Dropdown preview in the Form Builder not updated if the first option's value is empty. - Fixed: Preserve reply-to in the Notifications settings when creating a form from a template. - Fixed: Minor button styling issue in WordPress 4.9. - Fixed: Avoid error by allowing objects implementing the `__invoke()` method as a hook callback. - Fixed: Various Dropdown field CSS issues in the Form Builder. = 1.6.8.1 = - Changed: Allow using right-click to open a form preview in a new tab or window. - Fixed: Notifications disabled on the previous version were enabled after the 1.6.8 update. - Fixed: Block preview in new WordPress 5.8 Widgets Block Editor now aligned properly. - Fixed: Word wrapping issues in various places for non-English languages. = 1.6.8 = - Added: Form Builder visual modernization and improved user experience. - Added: Form Builder is now more optimized, loading and performing faster. - Added: More tooltips in various areas of the Form Builder to provide context for different options. - Added: A lot more Templates that you can use for one-click forms creation. - Added: Categorize Form Templates into different sections and improve search, allowing faster access and better user experience. - Added: New Preview button for all Templates, so you can check how your form will look like before applying the Template. - Changed: Dropped support for IE11 in the Form Builder (same as WordPress 5.8). - Changed: Introducing tabs instead of accordion for Field Options in the Form Builder: General, Advanced, Smart Logic. - Changed: Allow underscore symbol usage in Allowlist/Denylist in Email field. - Changed: Updated DOMPurify lib to 2.3.0. - Fixed: A lot of visual inconsistencies inside the Form Builder. - Fixed: TinyMCE editor in the default Confirmation has 2 tabs (Visual, Text), which previously had incorrect height. - Fixed: Firefox-specific issue that prevents fields from being drag-n-dropped inside the Preview area of the Form Builder. - Fixed: Form Builder performance issue with large number of choices added to option fields. - Fixed: Missing down arrow in Dropdown field in Twenty Twenty-One theme. - Fixed: Checkboxes and Multiple Choice input fields rendered incorrectly in Twenty Twenty-One theme. - Fixed: Breaking words when wrapping in Modern Dropdown field. - Fixed: Download all relevant translations when initiating an upgrade from Lite to Pro on the plugin Settings page. - Fixed: Preserve line breaks when pasting blocks of text into Paragraph field with word limit option enabled. = 1.6.7.3 = - Changed: Renamed a misspelled `wpforms_display_sumbit_spinner_src` filter to `wpforms_display_submit_spinner_src`, old name is now deprecated. - Fixed: Expired transients are not deleted automatically. - Fixed: Entries count race condition under high load in the plugin Lite version. - Fixed: Form Builder product education links. = 1.6.7.2 = - Fixed: Admin notice option flag reference. = 1.6.7.1 = - Changed: Improved logic of pasting a text in the fields with word and character limits. - Changed: Updated DOMPurify lib to 2.2.9. - Changed: Some admin notices can be dismissed on a per-user basis. - Fixed: Smart Tags don't parse dot and comma symbols well. - Fixed: In rare cases, WPForms functions calls are not handled correctly inside the third-party frontend AJAX calls. - Fixed: Incorrect `wpforms_smart_tag_process` filter deprecation notice. - Fixed: Compatibility with the Elementor 3.1.x, 3.2.x and 3.3.x. = 1.6.7 = - Changed: Email Summaries can now be tweaked via the hook to have multiple "To" recipients. - Changed: Email Summaries subject line is changed to reduce a chance of going into spam folder. - Changed: Rewrote inline captcha scripts in vanilla JS to improve its compatibility with a third-party code. - Changed: Replaced jQuery.isFunction() (deprecated as of jQuery 3.3) usages with a recommended counterpart. - Changed: Refine smart tags system to improve extensibility. - Changed: Each addon title is linked to a related documentation on the Addons page. - Changed: Externally disabled fields are displayed inside the Form Builder as dismissible notices. - Changed: Updated DOMPurify lib to 2.2.8. - Fixed: Inconsistent Form Builder JS events loading order in jQuery 3+ across different browsers. = 1.6.6 = - Added: WordPress 5.7 new color scheme compatibility. - Changed: Allow using 0/false values in choices label for Checkboxes, Multiple Choice, Dropdown fields. - Changed: Better AJAX form submit error messages handling for the Email field. - Changed: Refactored Tools page with all of its subpages for easier long-term support. - Changed: Updated the WPForms > About Us page. - Changed: Updated DOMPurify lib to 2.2.7. - Changed: Replaced jQuery.ready() function usage with a recommended way since jQuery 3.0. - Fixed: HTML layout is broken on the Analytics page for some site languages. - Fixed: Incorrect permission checks for different places in the dashboard and the Form Builder. - Fixed: RTL support for Name, Email fields. - Fixed: Speed up the Form Builder rendering by loading certain scripts only when the Embed functionality is triggered. - Fixed: The `iframe` HTML element was rendered incorrectly in the Twenty Twenty theme. - Fixed: The Checkboxes and Multiple Choice fields CSS issues in Twenty Twenty-One theme. - Fixed: WPForms Challenge was drunk in the Firefox browser. - Fixed: reCAPTCHA doesn't render in a popup when the same form exists in another place. = 1.6.5 = - Changed: Updated DOMPurify lib to 2.2.6. - Changed: Reload the Form Builder after Save and Embed option usage, and going back using the browser Back button. - Changed: Disable From Name and From Email fields in Form Builder > Notifications when the WP Mail SMTP plugin forces those values. - Fixed: The Gutenberg block JavaScript issue in WordPress 5.0-5.1.1 versions. - Fixed: The Gutenberg block CSS issues in Twenty Twenty-One theme. - Fixed: AMP incompatible script for Lite version. - Fixed: Logs records on WPForms > Tools > Logs may not be clickable under certain circumstances, preventing previewing the logged information. - Fixed: Email Summaries ignoring timezone offset while generating reports. - Fixed: Email Suggestion feature when using two or more forms on a page. - Fixed: Missing on-hover tooltips' after cloning/duplicating elements in the Form Builder. - Fixed: Minor styling issues on the WPForms > Tools > Logs page. - Fixed: Issues while importing forms saved in UTF-8 with BOM. - Fixed: Improve performance of the WPForms Challenge. - Fixed: WPForms module icon compatibility with the latest Elementor version. - Fixed: Incorrect CPT and taxonomy terms alphabetical sorting of the Dynamic Choice option values for fields that support this Advanced Option. - Fixed: Compatibility with WordPress 4.9 on the WPForms > Analytics/SMTP pages. - Fixed: AJAX form submissions on some server configuration. - Fixed: Improve Admin Menu Bar support since WordPress 5.2. = 1.6.4.1 = - Added: Frontend form warning indicating missing WPForms JS (visible to admin only). - Changed: Help hCaptcha process all requests in a more efficient way, so bot detection will work better. - Fixed: Improve pagination on Tools > Logs page inside the plugin admin area. - Fixed: Various JavaScript issues on create post/page/form pages in WordPress 5.6. - Fixed: Edge cases when custom fields mapping for providers was broken. = 1.6.4 = - Added: hCaptcha support, see WPForms > CAPTCHA settings. - Added: Character/word limit validation message control inside Settings > Validation page. - Changed: Dropdown fields using the Modern format will only show the search option if at least 8 choices are provided. - Changed: Updated jQuery inputmask library to v5.0.6-beta20 - Changed: Improved Form Builder Help documentation caching. - Changed: Only create our Logs database table when specifically enabled in the Tools settings. - Changed: Updated WPForms install count and rating information. - Changed: Added "Copy to Clipboard" button inside Form Embed modal. - Fixed: PHP Warning caused by Email field changes. - Fixed: Editing multiline text in Paragraph field breaks new lines in submitted text. - Fixed: Javascript conflicts with IE11. - Fixed: Possible errors if web host had `set_time_limit()` disabled. - Fixed: Email validation issue if form is in a page multiple times. - Fixed: Footer links in the Summary email are now working properly. - Fixed: Double-click issue for "Add New Account" buttons on the Settings > Integrations page. - Fixed: Gutenberg block ignores "Include Form Styling" setting and forces full CSS stylesheet. = 1.6.3.1 = - Added: Native integration with Divi. - Added: Email field Allowlist/Denylist restrictions, see Email field Advanced Options. - Added: Form builder Help - contextual help, search docs, and more. - Added: Logging, which can be enabled for troubleshooting from WPForms > Tools > Logs. - Changed: Nicely notify users in the Form Builder when their WordPress session has expired, and they can't save the form anymore without a page reload. - Changed: Better AJAX form submit field error messages handling. - Fixed: Custom metabox heading styling due to WordPress core changes. - Fixed: Page title smart tag not working in some use cases when using AJAX form submissions. - Fixed: Various admin area display issues when the field label is empty. - Fixed: Logo Translate plugin integration issues. - Fixed: Elementor widget edge case issues. - Fixed: Form settings could be visible before the form was created. - Fixed: Form builder styling inconsistencies with Dropdown field styles. - Fixed: Input mask issues with some mobile browsers, notably Chrome. - Fixed: Always display the WPForms admin area in the user's language regardless of the site language. - Fixed: Do not load certain JS variables twice on the front end. - Fixed: Form title display issue inside the form builder with smaller view ports. - Fixed: Elementor widget display issue on frontend when no form has been created. = 1.6.2.3 = - Changed: Added shortcode access to a form embed modal and enhanced modal navigation. - Changed: Improved empty states for All Forms and Builder no fields preview panel. - Changed: Improved Email Summaries footer text. - Fixed: Custom validation messages for the fields appear correctly with Ajax form submission enabled. - Fixed: Base style CSS introduces no additional scrollbars now. - Fixed: Correct cursor for image choices validation messages. - Fixed: Getting the license details from DB works as expected regardless of a context. - Fixed: Getting the list of WPForms addons for user license level works as expected regardless of a context. - Fixed: Number Slider field increment is checked to be more than zero. - Fixed: Modern Dropdown validation works as expected for AJAX forms. = 1.6.2.2 = - Added: Caching friendly anti-spam protection (form tokens). - Added: Native integration with Elementor: add to the page and create new forms right inside its builder. - Added: Add a preview to the WPForms Gutenberg block. - Changed: Greatly improve WPForms Challenge experience. - Changed: Improve word counting when the Limit Length field option is used with Single Line Text/Paragraph Text fields. - Changed: Improve Number field input restrictions with various browsers. - Changed: Form field validation will now fail if input mask is enabled and user input does not complete required input mask elements. - Changed: Icon for the Multiple Choice field is now more representative. - Changed: Hide Delete button for a "Default Notification" in the Form Builder. - Changed: Improve Lite migrations for WordPress Multisite installations. - Changed: Update Constant Contact logos because of their rebranding. - Changed: Improve descriptions of various plugin options and add more context to them. - Fixed: Properly map fields in various addons when the first field is added in the Form Builder. - Fixed: Issue when editing Checkbox field entry values when dynamic choices were enabled and multiple values were saved. - Fixed: Refresh the list of form fields that are required to properly render marketing addons. - Fixed: "Invalid Form" error for logged out users upon submitting an AJAX form on some server configurations. - Fixed: Multiple Choice fields had issues in the builder with image choices with empty labels. - Fixed: Make bulk actions at the bottom of the Forms Overview work. - Fixed: "Single Line Text" and "Paragraph Text" calculate empty field word count incorrectly. - Fixed: Do not allow Action Scheduler to generate errors during the plugin uninstallation procedure. - Fixed: Input mask validation produces a JS error on jQuery 3.x. = 1.6.1 = - Added: Display a list of scheduled actions on WPForms > Tools > Scheduled Actions page. - Added: Multiple select option for Dropdown field (off by default). - Added: New Modern style option for Dropdown field (off by default). - Added: Support Smart Tags in form descriptions. - Fixed: Properly handle multiple clicks on various accordion-like elements on Form Builder and Settings > Integrations pages. - Fixed: Remove all the plugin-related information on uninstall from the DB when opted-in in plugin settings. - Fixed: Replace all new lines characters with spaces in notification email subjects (e.g., when an address field value is used in a subject via a smart tag). - Fixed: Make sure the plugin doesn't crash when `iconv` PHP extension is not installed on a server. - Fixed: Properly handle fields with choices with new lines in their labels when connected to Conditional Logic. - Fixed: Google Invisible v2 reCAPTCHA should show Submit Button Processing Text when the form is submitted. - Fixed: Display the list of countries in the "Countries" preset and in the Address field in alphabetical order regardless of the current site language. = 1.6.0.2 = - Fixed: The default value 0 (zero) of the Paragraph Text field does not display on the frontend. - Fixed: Product education URL encoding issues. - Fixed: Securely store WPForms anonymized cookie, so it cannot be sent along with cross-site requests (samesite). - Fixed: Various PHP notices that may appear during wildly complicated forms submissions. - Fixed: Improved escaping inside Form Builder live preview, props Fortinet Fortiguard Labs. - Fixed: Incorrect interval value was used when running a cleanup job after notifications sent. - Fixed: Delete orphaned plugin translation files when cleanup option in plugin settings is checked and the plugin is deleted from the site. = 1.6.0.1 = - Added: Admin bar menu item. - Added: Form Builder alert when using browser "Back" button if form contains unsaved changes. - Added: Settings > Emails: "Optimize Email Sending" option which enables sending emails asynchronously. - Changed: Async form notification emails are now off by default. - Changed: Number Slider field display improvements on small devices. - Fixed: Error if there are some plugins or themes add `widget_title` filter. - Fixed: Choice Images not displaying in form notifications if no label is set. - Fixed: Form Builder "drag zone" not available when all fields are deleted. - Fixed: Empty `div` appended to end of form display. - Fixed: Block alignment issues (WordPress 5.4+). - Fixed: Form Builder field option panel is not available if field is placed before the last form field. - Fixed: Fallback population for fields with choices (checkbox, radio etc) when special characters are used. - Fixed: Integrity of decoded data with additional sanitizing. - Fixed: Compatibility issues with Elementor. = 1.5.9.5 = - Fixed: do not try to process entries in Lite. = 1.5.9.4 = - Changed: Improve async notification emails scheduling compatibility with certain caching plugins and site installs. - Fixed: Some smart tags are not rendered correctly in the email notifications if sent asynchronously. = 1.5.9.1 = - Fixed: Checkbox image click doesn't work well to select an option. - Fixed: Do not allow empty connection names (spaces only) for providers. = 1.5.9 = - IMPORTANT: Support for PHP 5.4 has been discontinued. If you are running PHP 5.4, you MUST upgrade PHP before installing WPForms 1.5.9. Failure to do that will disable WPForms core functionality. - Added: New hooks and filters in several places, e.g. pre-deletion for entries/forms. - Added: Async/scheduled tasks management support (e.g. sending emails in the background). - Changed: Update the "How to Create Your First Contact Form" video URL. - Changed: Update the "How to Embed A Form" video URL in a Form Builder "Embed" modal. - Changed: Number Slider field: allow empty value in "Value Display" option. - Changed: Improved admin input field focus states to be more consistent with WordPress core. - Fixed: Numbers/Numbers Slider field: allow `0` value in email notifications and field smart tags output. - Fixed: Required Checkbox fields with `0` value not passing validation. - Fixed: Multiple Choice field could generate a PHP notice when the form was created after using a custom form template. - Fixed: Initialize tooltips properly for newly created Notifications/Confirmations. - Fixed: Ajax button should be re-enabled after incorrect form submission. - Fixed: Remove Javascript alert notice when form is viewed in AMP. - Fixed: Improve compatibility with the "Lazy Loading Feature Plugin" for Ajax spinner image on front-end. - Fixed: Validation issue with required Checkbox fields using Image Choices. - Fixed: Form builder preview issue with a field using Dynamic Choices setting. - Fixed: Number Field values not allowing leading zeros. - Fixed: Form Builder: templates search bar shows icon over text. - Fixed: Security hardening and improvements. = 1.5.8.2 = - Fixed: Can't add new line in textareas in the form builder (Notifications > Message etc). - Fixed: Choices editing block inside the form builder is hidden if creating a form using a template. = 1.5.8.1 = - Fixed: "Invalid form" error on form submit if AJAX form submissions is enabled and user is not logged in. = 1.5.8 = - Changed: Sullie logo in the Form Builder got his left hand back. - Changed: Hide image choices options if dynamic choices is enabled. - Changed: Adjusted Number field input to improve consistency across different browsers/devices. - Changed: Improve Block detection to load CSS styles earlier. - Changed: Open New Provider Connection modal after account has been added. - Changed: Improve the way Lite and Pro versions of the plugin activation handled. - Changed: Remove the unnecessary "Required" setting from a Number Slider field. - Fixed: Number slider incorrect label display in the form Builder preview panel. - Fixed: Quick links menu generating browser console error on Survey Print results page. - Fixed: Required validation message isn't removed immediately on choices selection. - Fixed: Form Builder styles compatibility with the new WordPress 5.3 styles. - Fixed: Correctly process Enter key press in Smart phone field when Enter is used to submit a form. - Fixed: Remove not-needed GET params from URL in Builder when a new form created to prevent race conditions with certain providers loading logic. - Fixed: Properly scroll in all major browsers to a faulty field in a form, including multi-page forms. - Fixed: Textarea character limit check returns an error if the content pasted is too large and contains '\r\n' line breaks. = 1.5.7 = - Added: Number Slider field. - Added: reCAPTCHA field in Form Builder allowing to easily manage the reCAPTCHA for a form. - Added: Admin area quick links menu. - Added: Analytics sub-menu page. - Added: SMTP sub-menu page. - Changed: Improved forms bulk actions processing. - Changed: Added a Form Builder splash screen which is displayed on mobile devices. - Changed: Display warning message if JavaScript is disabled in the browser. - Changed: Improved form front-end display and alignment for Gutenberg focused themes. - Changed: Improved invisible reCAPTCHA behavior when form is submitted. - Changed: Improved actions and filters for notification emails. - Fixed: Duplicate of the duplicated form created on page reload. - Fixed: Do not submit the form via AJAX (if enabled in form settings) when in AMP mode. - Fixed: WordPress 5.3 admin area styling issues. - Fixed: Number field incorrectly processing negative numbers. - Fixed: `page_url` Smart Tag issues. = 1.5.6.2 = - Added: Default value for "Paragraph text" field. - Fixed: WordPress 5.3 compatibility. - Fixed: Smart Phone countries squashed dropdown on screen-width <= 600px on themes with Base form styling selected. - Fixed: Field's Default value `0` disappears after saving and exiting the form builder. - Fixed: Smart Email field did not recognize `.dev` top level domains as valid. = 1.5.6.1 = - N/A: Pro only release. = 1.5.6 = - IMPORANT: Support for PHP 5.3 has been discontinued. If you are running PHP 5.3, you MUST upgrade PHP before installing WPForms 1.5.6. Failure to do that will disable WPForms core functionality. - Added: Single Line Text/Paragraph fields limitation options (limit by character or word count). - Added: "Community" sub-menu page for easy access to helpful resources and links. - Changed: Minimum PHP version requirement is now PHP 5.4. - Changed: Minimum WordPress version requirement is now WordPress 4.9. = 1.5.5.1 = - Fixed: Broken reCAPTCHA checkbox in Builder > Settings > General if reCAPTCHA type does not set in WPForms > Settings. - Fixed: Email field server-side validation issue. - Fixed: Broken "Bulk add" option in Builder in IE 11. - Fixed: Broken image choices selection and styling (layout) issue in IE 11. - Fixed: Backward compatible filters for some fields when displaying them were missing. = 1.5.5 = - Added: WPForms details inside Site Health Info reports (Tools > Site Health > Info). - Added: Filter `wpforms_emails_summaries_is_disabled` to easily disable Email Summaries functionality. - Added: New smart tag: `{field_html_id="42"}` - that will postprocess field value and display its HTML representation. - Changed: Improve `wpforms_get_ip()` IP detection and related `{user_ip}` smart-tag value. - Fixed: Giving access to WPForms for Editors (and other roles) should give access to dashboard widget as well. - Fixed: Add 'attr' property to 'input_container' for radio/checkbox-based fields. - Fixed: Various typos. - Fixed: WP Mail SMTP plugin description on About us page. = 1.5.4.2 = - Changed: Renamed certain actions with typos in their names, backwards-compatible. Added a deprecation text using `do_action_deprecated()`. - Fixed: About Us page behaviour when WP Mail SMTP Pro is installed. - Fixed: reCAPTCHA settings could be saved without providing reCAPTCHA type. = 1.5.4.1 = - Fixed: Plugin Settings > Misc > 'View Email Summary Example' link errors. = 1.5.4 = - Added: Email Summaries. - Added: Form builder hotkey to save changes, CTRL + S. - Changed: Team photo under WPForms > About Us. :) - Fixed: Dynamic field population populates checkbox and radio fields values but not adding 'wpforms-selected' class to its containers. - Fixed: Dropdown field attributes are now accessible with `wpforms_field_properties` filter. - Fixed: Form builder field buttons overflowing when translated. - Fixed: Dashboard widget PHP error. - Fixed: Form can be submitted multiple times if "Submit button processing text" form setting empty. - Fixed: "Error loading block" in Gutenberg if Additional CSS form settings are provided. = 1.5.3.1 = - Fixed: Checkbox field validation issue when field is not required. = 1.5.3 = - Added: AJAX form submissions. - Added: Full support and compatiblity with Google AMP. - Added: Google reCAPTCHA v3. - Changed: WPForms uninstall script for better cleanup process. - Changed: Email field mailcheck feature to offer additional controls. New filters: `wpforms_mailcheck_enabled`, `wpforms_mailcheck_domains`, and `wpforms_mailcheck_toplevel_domains`. - Fixed: Special characters aren't encoded when Smart Tags are processed in query string. - Fixed: Fields with Image choices are not working with some Android and older desktop browsers. - Fixed: Form Builder: Several alert modals are displayed in batch if multiple providers have configuration issues. - Fixed: WP_Post object is returned from `wpforms()->form->get()` if form data is requested with a non-WPForms post ID. = 1.5.2.3 = - Fixed: PHP error if checkbox field is empty when form is submitted. = 1.5.2.2 = - Fixed: PHP notice/warnings from undefined constant (typo). = 1.5.2.1 = - Fixed: Required Checkbox fields asking for all inputs to be checked to pass validation. = 1.5.2 = - Added: Choice Limit advanced option for Checkbox fields. - Added: Smart domain name typo detection for Email fields. - Added: New Gutenberg block keywords to help with discovery. - Added: Link to "How to Properly Test Your WordPress Forms Before Launching" doc inside Gutenberg block. - Changed: Form builder field delete icon, now a trash can. - Changed: Updated jQuery inputmask library to v4.0.6. - Changed: Updated jQuery validation plugin to v1.19.0. - Changed: Clear Dashboard widget cache when form is created/deleted/updated. - Fixed: Blank form if using form template containing `target="_blank"`. - Fixed: Honeypot field not using unique IDs. - Fixed: Duplicating forms creating another duplicate if afterwards the table was sorted. - Fixed: Minor issues with Gutenberg editor. - Fixed: Form Builder embed modal showing Classic Editor instructions for Gutenberg users. - Fixed: Number field allowing non-numerical characters on iOS devices. - Fixed: Field Dynamic Choices not showing in form preview when using "Post Type". = 1.5.1.3 = - Fixed: Importing forms that containing `target="_blank"`. - Fixed: Quote support/display inside query param Smart Tags. - Fixed: Other minor fixes. = 1.5.1.1 = - Fixed: Conflict with WordPress 5.1 if form contained target="_blank". - Fixed: Unable to uncheck default Multiple Choice value in form builder after being set initially. - Fixed: PHP error when entries are exported after a field has been deleted. - Fixed: Form builder Email notification conditional logic settings display issue after new notification is added. - Fixed: Conflict with some themes preventing Multiple Choice fields from being selectable. = 1.5.1 = - Added: Complete translations for Spanish, Italian, Japanese, and German. - Added: Smart Tag for referencing user meta data, `{user_meta key=""}`. - Changed: Improved support with LocoTranslate plugin. - Changed: Refactored Form Preview functionality, no longer requiring hidden private page to be created. - Changed: Always load full WPForms styling inside Gutenberg so forms render correctly. - Fixed: Typos, grammar, and other i18n related issues. - Fixed: Created alias class for `WPForms` to prevent issue with namespacing introduced in 1.5.0. - Fixed: Dynamic population issue when using Image Choices field setting. = 1.5.0.4 = - Changed: Dashboard widget improvements. - Fixed: Various typos. = 1.5.0.3 = - Changed: Minor improvements to Gutenberg block for WordPress 5.0. - Fixed: Error when activating WPForms Pro if WPForms Lite is still activated. = 1.5.0 = - IMPORTANT: Support for PHP 5.2 has been discontinued. If you are running PHP 5.2, you MUST upgrade PHP before installing WPForms 1.5. Failure to do that will disable WPForms core functionality. - Added: Dashboard widget. - Added: WPForms Challenge: an interactive step-by-step guide to creating a form for new users. - Added: Dynamic field population, available to enable from form settings. - Added: "About Us" admin page (WPForms > About Us). - Added: {user_first_name} and {user_last_name} Smart Tags. - Changed: Improved randomizing if field is configured to randomize items. - Changed: Improved i18n support. - Fixed: Form builder errors if user had Visual Editor disabled in profile. - Fixed: Form builder Windows styling issues. - Fixed: Form builder dynamic choices warning not always removing. - Fixed: Form builder "Show Layout" CSS formatting. - Fixed: reCAPTCHA compatibility when form is inside OptinMonster popup. - Fixed: Gutenberg block returning error if no forms have been created. = 1.4.9 = - Added: Pirate Forms importer. - Changed: Some form builder tooltips to contain documentation links. - Fixed: Form builder javascript conflict with jQuery non-conflict mode. - Fixed: PHP Notice from WPForms widget. - Fixed: Incorrect markup around Addons submenu item. = 1.4.8.1 = - Fixed: Certain confirmation settings, before 1.4.8, not displaying correctly in the form builder. = 1.4.8 = - Added: Gutenberg block. - Added: WP Mail SMTP detection and hints in the form builder notification settings. - Added: Alt and title tags to image choices images on frontend display. - Changed: i18n improvements. - Fixed: Incorrect param used with `shortcode_atts`. - Fixed: Accessing `wpforms_setting` in frontend javascript before checking if it exists. - Fixed: PHP error toggling form builder notifications in some use cases. - Fixed: GDPR field Agreement text not updating in real time. - Fixed: Marketing provider connections containing an escaped apostrophe. - Fixed: Pressing "Enter" in the form builder resulting in unexpected behavior. - Fixed: Security enhancements and other misc. bug fixes. = 1.4.7.2 = - Fixed: Honeypot field using a none unique CSS ID. - Fixed: Form builder Bulk Add display issues in certain use cases. - Fixed: Checkbox field values not saving if Show Values field option is enabled. = 1.4.7.1 = - Changed: Updated Russian translation. - Fixed: Various i18n issues. = 1.4.7 = - Added: New Providers class and functionality. - Changed: Old PHP version (5.2 and 5.3) admin warning adjusted to reflect new August 2018 time line. - Fixed: Multiple Choice fields showing as Radio fields in the builder preview when first created. - Fixed: Duplicating fields in the form builder causing issues with certain field types. - Fixed: Escaping issue with provider connection names contained an apostrophe. - Fixed: Alignment issues with the Addons page display. - Fixed: Incorrect text on the Welcome activation page. = 1.4.6 = - Added: GDPR Enhancements plugin setting [doc](https://wpforms.com/how-to-create-gdpr-compliant-forms/). - Added: GDPR Enhancement: User Agreement form field. - Changed: PHP warning that alerts users support for PHP 5.4 and below will be dropped this summer. - Changed: Spam logging, to improve performance. - Fixed: Typo in base form CSS. - Fixed: Stripping HTML from the checkbox and mulitple choice labels in the form builder. - Fixed: Form builder icon visibility when field labels are hidden. = 1.4.5.3 = - Changed: Use minified admin assets when appropriate. - Changed: Show helpful doc link in form embed modal. - Fixed: reCAPTCHA v2 showing in form builder when using Invisible reCAPTCHA. - Fixed: Remove jQuery shorthand references in `admin-utils` to prevent conflicts. = 1.4.5.2 = - Fixed: Incorrect documenation link for Input Mask. - Fixed: Input Mask value disappearing when form builder is refreshed. = 1.4.5.1 = - Fixed: Dynamic choices not displaying correctly for Multiple Choice and Checkbox fields. = 1.4.5 = - Added: Image choices feature with Checkbox and Multiple Choice fields; Images can now be uploaded and displayed with your choices! - Added: Custom input masks for Single Line Text fields (Advanced Options). - Added: No-Conflict Mode for Google reCAPTCHA (Settings > reCAPTCHA). Removes other reCAPTCHA occurrences, to prevent conflicts. - Added: SSL Connection Test (Tools > System Info). Quicky verify that your web host correct supports SSL connections. - Added: `{user_full_name}` Smart Tag, displays users first and last name. - Added: Discalimer / Terms of Service Display formatting option for Checkbox fields (Advanced Options). - Added: Basic CSS styling for `disabled` fields. - Added: Uninstall routine, available from Settings > Misc. - Added: Form builder performance improvements. Editing a form with hundreds of fields is now 500%+ faster! - Changed: New Settings tab: Misc, moved Hide Annoucements option to new tab. - Changed: `{user_display}` Smart Tag diplays user's display name (in most cases, this is the user's name). - Changed: All `<form>` attributes can now be changed via `wpforms_frontend_form_atts` filter. - Fixed: Form builder tab icon alignment conflicts with third party plugin CSS. - Fixed: Smart Tag dropdown display issues in the form builder. - Fixed: Form builder drag and drop area disappearing if all fields are removed from a form. = 1.4.4.1 = - Changed: Textdomain loading to a later priority. - Changed: Allow the `WPForms_Builder` class to be accessible. - Changed: Move the confirmation message `wpautop` to an earlier priority to not conflict with content added using filters. - Fixed: Form builder templates area not aligning correctly in some browsers. - Fixed: Incorrect permissions check for annoucements feed. = 1.4.4 = - Added: Advanced setting for Multiple Choice and Checkbox fields to randomize choices - Changed: Admin menu icons now uses SVG instead of custom font icon - Changed: Reviewed all translatable strings, improved escaping and formatting - Changed: External links have `rel="noopener noreferrer"` improve security - Changed: Permission check centralized into a single function (`wpforms_current_user_can()`) - Changed: Required label field text centralized into a single function (`wpforms_get_required_label()`) - Fixed: Typo in German translation - Fixed: Required email provider connection fields not highlighting when left empty - Fixed: Inside form builder, notification name area breaking into multiple lines on smaller screens = 1.4.3 = - Added: Early filter for form data before form output, `wpforms_frontend_form_data` - Changed: Standardize and tweak modal window button styles - Changed: Default mail notification settings are now sent "from" the site administrator email; user email is used in Reply-To where applicable (to hopefully improve email deliverability) - Changed: Removed "Hide form name and description" form setting as it was a common source or confusion - Fixed: Site cache being flushed when it shouldn't have been, affecting performance in some scenarios - Fixed: Country, state, months and days not properly exposed to i18n - Fixed: CSV export dates not properly using i18n - Fixed: WPForms custom post types omitting labels - Fixed: Smart Tag value encoding issues with email notifications - Fixed: Infinite recursion issue when using Dynamic Values option - Fixed: PHP notice in form builder = 1.4.2.2 = - Changed: Announcement feed data = 1.4.2.1 = - Added: Setting to hide Announcement feed = 1.4.2 = - Added: Import your old Ninja Forms or Contact Form 7 forms! (WPForms > Tools > Import) - Changed: Dropdown/Checkbox/Multiple Choice "Show Values" setting has been hidden by default to avoid confusion, can be re-enabled using the `wpforms_fields_show_options_setting` filter - Fixed: reCAPTCHA now showing in the Form Builder preview when enabled - Fixed: Encoded/escaped entities in email notifications - Fixed: German translation issue = 1.4.1.1 = - Changed: Improved the loading order of javascript files for forms builder - Changed: Update some strings for Russian translation = 1.4.1= - Added: Ability to rename Form>Settings>Notifications>Single notification panels - Added: Define a minimum PHP version support in plugin readme.txt file - Added: Display a friendly link to a full page version, when form is previewed on AMP pages - Added: Ability to collapse Form>Settings>Notifications>Single notification panels - Added: Russian translation - Added: Allow more than 1 default selection for checkboxes fields - Changed: Bump minimum WordPress version to 4.6 - Changed: Improved localization support of the plugin - Changed: Improved texts in various places - Changed: Code style improvements throughout the plugin - Changed: Combine WPFORMS_DEBUG and WPFORMS_DEVELOPMENT into one, use `wpforms_debug()` to check - Changed: All HTTP requests now validate target sites SSL certificates with WP bundled certificates (since 3.7) - Fixed: Notification email is empty if submitted form has no user values (displaying user friendly message instead) - Fixed: Pressing enter in "Enter a notification name" popup does nothing - Fixed: Fancy Fields can be dragged into form, but then get stuck - Fixed: Deprecate a misspelled `wpforms_csv_export_seperator` filter, introduced a proper name for it - Fixed: Conditional logic comparison issues if rule contained special characters = 1.4.0.1 = - Added: Non-dismissible Dashboard page admin only notice about PHP 5.2. = 1.4.0 = - Added: Announcement feed - Changed: Core form templates are now displayed separate in the form builder from other custom templates - Changed: Refactored CSV exporting for better support - Fixed: Dynamic Choices large items modal render issue - Fixed: Certain characters (such as comma) breaking CSV export format - Fixed: Cursor issues inside the form builder - Fixed: CSS Layout Generator class name typo - Fixed: Dynamic choices with nesting sometimes causing form builder to time out - Fixed: Settings page typos - Fixed: Tools page export description text typo - Fixed: Widget state not displayed correctly when adding via Customizer, without forcing user to select a form = 1.3.9.1 = - Changed: Template Export excludes array items with empty strings - Fixed: Admin notices displaying on plugin Welcome/activation screen - Fixed: WPForms admin pages displaying blank due to conflicts with a few other plugins = 1.3.9 = - Added: Complete redesign and refactor of admin area - Added: New Settings API - Added: Entry print preview compact mode - Added: Entry print preview view entry notes - Added: Dynamic field choices nest hierarchical items - Added: Form import/export to Tools sub page - Added: Form template export to Tools sub page - Changed: System Info content to new Tools sub-page - Changed: Shortcode provided in form builder now includes title/description arguments = 1.3.8 = - Changed: Available conditional logic rules/functionality with Providers have been updated - Changed: Updated form builder modals (jquery-confirm.js) - Changed: Many Form Builder performance enhancements - Fixed: Number field validation message not saving - Fixed: Email confirmation setting not displaying correctly with Small field size = 1.3.7.4 = - Added: Marketing tab in the form builder shows all possible providers. = 1.3.7.3 - Fixed: Required setting checkbox getting out of sync when duplicating fields - Fixed: CSS class name typo in the form builder layout selector - Fixed: Smart Tag `field_id` stripping line breaks - Fixed: Form JS settings `wpforms_settings` missing due to some caching plugins - Fixed: Empty classes causing `array` string to be printed in some use cases = 1.3.7.2 = - Fixed: Error for some users with PHP 5.4 and below = 1.3.7.1 - Fixed: Issue sending form notifications using email fields that had confirmation enabled = 1.3.7 = - Added: Google Invisible reCAPTCHA support - Added: Custom field validation messages (see WPForms Settings page) - Added: Bulk add choices for Checkbox, Multiple Choice, and Dropdown fields - Added: Filter to allow email notifications to include empty fields, `wpforms_email_display_empty_fields` - Added: Field CSS layout selector - Changed: Leverage `wp_json_encode` instead of native PHP function - Changed: Various WordPress coding standard improvements (work in progress) - Changed: Refactored form front-end code to allow for more customizations - Changed: Refactored text, textarea, email, number, and name fields to allow for more customizations (more coming next release) - Fixed: Welcome page typo - Fixed: SmartTag selectors getting off sync inside form builder = 1.3.6.2 = - Changed: Improved messaging on Entries page (Lite) = 1.3.6.1 = - Added: Option to disable activation welcome screen, `wpforms_activation_redirect` = 1.3.6 = - Added: Constant Contact integration - Changed: Don't strip tags from plain text emails - Fixed: Form builder javascript conflict with Clef plugin - Fixed: Form builder logo URL double slash - Fixed: Form builder embed code field not being selectable = 1.3.5 = - Fixed: Some browsers allowing unexpected characters inside number input fields - Fixed: Issue with Dropdown field placeholder text - Fixed: Other plugins loading conflicting scripts in form builder = 1.3.4 = - Added: reCAPTCHA improvements; reCAPTCHA now required if turned on - Fixed: Date/Time Smart Tag not using WordPress time zone settings - Fixed: Name field defaults not processing Smart Tags = 1.3.3 = - Added: Default value support in the email field - Added: Various new hooks and filters for improved extendability - Fixed: Possible errors if web host had `set_time_limit()` disabled = 1.3.2 = - Added: New form class, `.inline-fields`, to apply single line form layout - Changed: All Smart Tags now available for Email Subject field in form notifications - Fixed: Email addresses reporting as invalid of the domain contained capitalization - Fixed: Author related Smart Tags not working in form notification fields - Fixed: Typo on settings page related to Carbon Copy - Fixed: PHP 7.1 warning messages inside the form builder = 1.3.1.2 = - Fixed: Plugin name to correctly indicate Lite for Lite release = 1.3.1.1 = - Fixed: Error with 1.3.1 Lite release = 1.3.1 = - Added: Smart Tags for author ID, email, and name - Added: Carbon Copy (CC) support for form notifications; enable in WPForms Settings - Fixed: Field duplication issues - Fixed: TinyMCE "Add Form" button not opening modal with dynamic TinyMCE instances - Fixed: Email formatting issues when using plain text formatting - Fixed: Number field validation tripping when number submitted is zero - Fixed: reCAPTCHA validation passing when reCAPTCHA left blank - Fixed: Dropdown field size not reflecting in builder = 1.3.0 = - Added: Email field confirmation - Added: Support for Visual Composer - Added: Field class to force elements to full-width on mobile devices, `wpforms-mobile-full` - Changed: Placeholders are added/updated in real-time for Dropdown fields in the form builder - Changed: Add empty value to select element placeholders when displaying form for better markup validation - Fixed: Multiple instances of reCAPTCHA on a page not correctly loading - Fixed: Field choice defaults not restoring in form builder - Fixed: Field alignment issues in the form builder when dragging field more than once - Fixed: PHP fatal erroring if form notification email address provided is not valid upon sending - Fixed: Compatibility issues when network activated on a Multisite install = 1.2.9 = - Added: Individual fields can be duplicated in the form builder - Changed: How data is stored for fields using Dynamic Choices - Fixed: Global assets setting causing errors in some cases - Fixed: Writing setting ("correct invalidly nested XHTML") breaking forms containing HTML - Fixed: Forms being displayed/included on the native WordPress Export page - Fixed: Dynamic Choices erroring when used with Post Types - Fixed: Form labels including blank IDs = 1.2.8.1 = - Fixed: Form javascript email validation being too strict (introduced in 1.2.8) = 1.2.8 = - Added: Dynamic choice feature for Dropdown, Multiple Choice, and Checkbox fields - Changed: Loading order of templates and field classes - moved to `init` - Changed: Form javascript email validation requires domain TLD to pass - Fixed: HTML email notification templates uses site locale text-direction - Fixed: Javascript in the form builder conflicting with certain locales = 1.2.7 = - Added: Store initial plugin activation date - Added: Duplicate form submit protection - Fixed: Strip slashes from entry data before processing = 1.2.6 = - Added: Miscellaneous internal improvements - Fixed: Incorrectly named variables in the front-end javascript preventing features from properly being extendable = 1.2.5.1 = - Fixed: Removed duplicate Settings page title = 1.2.5 = - Added: Setting for Email template background color - Added: Form setting for form wrapper CSS class - Changed: Multiple Payment field stores Choice label text - Changed: reCAPTCHA tweaks and added filter - Changed: Improved IP detection - Fixed: Mapped select fields in builder triggered JS error = 1.2.4.1 = - Fixed: Plugin settings page not correctly showing = 1.2.4 = - Added: Additional logging and error reporting - Changed: Footer asset detection priority, for improved capability with other services - Changed: Refactored and refined front-end javascript - Fixed: Rogue PHP notices = 1.2.3.2 = - Fixed: Default field validation considered 0 as empty = 1.2.3.1 = - Fixed: Blank form email notification defaults = 1.2.3 = - Added: Form notification message setting - Added: Additional Smart Tags available inside Form Settings panels - Added: Process Smart Tags inside form confirmation messages and URLs - Added: Hide WPForms Preview page from WordPress dashboard - Added: System Details tab to WPForms Settings, to display debug information, etc - Changed: Many form builder javascript improvements - Changed: Improved internal logging and debugging tools - Fixed: Large forms not always saving because of max_input_vars PHP setting = 1.2.2.2 = - Fixed: Javascript asset not loading due to incorrect path = 1.2.2.1 = - Fixed: Form select inside modal window overflowing when a form exists with a long title = 1.2.2 = - Changed: Choice Layouts now use flexbox instead of CSS columns for better rendering - Fixed: Class name typo in a CSS column class introduced with 1.2.1 - Fixed: PHP notice on Entries page when there are no forms = 1.2.1 = * Added: Drag and drop field buttons - simply drag the desired field to the form! * Added: Choice Layout option for Checkboxes and Multiple Choice fields (under Advanced Options) * Added: Full and expanded column class/grid support * Changed: Refactored CSS column classes, previous classes are deprecated * Fixed: Form ending with column classes not closing correctly * Fixed: reCAPTCHA button overlaying submit button preventing it from being clicked = 1.2.0.1 = * Changed: Improved field and column gutter consistency = 1.2.0 = * Added: Form preview * Added: Column classes for Checkbox and Multiple choice inputs * Changed: Some fields did not have the correct (unique) CSS ID, this has been corrected, which means custom styling may need to be adjusted * Changed: Removed nonce verification = 1.1.8.4 = * Changed: Form notification settings hide if set to Off = 1.1.8.3 = * Fixed: Issue with submit button position when form ends with columns classes = 1.1.8.2 = * Changed: reCAPTCHA settings description to include link to how-to article = 1.1.8.1 = * Fixed: PHP warnings inside the form builder = 1.1.8 = * Changed: Moved email related settings into email settings group = 1.1.7.2 = * Added: "WPForm" to new-content admin bar menu item = 1.1.7.1 = * Changed: Removed "New" field name prefix = 1.1.7 = * Added: Smart Tag for Dropdown/Multiple choice raw values, allowing for conditional email address notifications (https://wpforms.com/docs/how-to-create-conditional-form-notifications-in-wpforms) * Added: Three column CSS field classes (https://wpforms.com/docs/how-to-create-multi-column-form-layouts-in-wpforms/) * Changed: Checkbox/Multiple Choice fields allow certain HTML to display in choice labels = 1.1.6.1 = * Added: Support for WordPress Zero Spam plugin (https://wordpress.org/plugins/zero-spam/) * Fixed: Issue when stacking fields with 2 column classes = 1.1.5.3 = * Changed: Email Header Image setting description to include recommended sizing = 1.1.5.2 = * Fixed: reCAPTCHA cutting off with full form theme = 1.1.5.1 = * Fixed: Debug output from wpforms.js = 1.1.5 = * Changed: HTML Email template footer text appearance = 1.1.4.2 = * Fixed: HTML emails not displaying correctly in Thunderbird = 1.1.4.1 = * Fixed: Form builder textareas not displaying full width = 1.1.4 = * Added: Form general setting for "Submit Button CSS Class" * Added: Duplicate forms from the Forms Overview page (All Forms) * Changed: Adjusted field display inside the Form Builder to better resemble full theme * Fixed: Don't allow inserting shortcode via modal if there are no forms * Fixed: Error when deleting a form = 1.1.3.2 = * Added: Suggestion form template = 1.1.3.1 = * Fixed: Form base theme CSS compatibility issue with Firefox = 1.1.3 = * Added: New class that handles sending/processing emails * Added: Form notification setting for "From Address", defaults to site administrator's email address * Added: HTML email template for sleek emails (enabled by default, see more below) * Added: General setting to configure email notification format * Added: General setting to optionally configure email notification header image * Changed: Default email notification format is now HTML, can go back to plain text format via option on WPForms > Settings page * Changed: Empty fields are no longer included in email notifications * Fixed: Issue with Checkbox field when empty = 1.1.2 = * Added: Form option to scroll page to form after submit, defaults on for new forms * Changed: Revamped "Full" form theme to be more consistent across different themes, browsers, and devices * Changed: Full theme and bare theme separated = 1.1.1.1 = * Changed: Upgrade information = 1.1.1 = * Fixed: Settings page typo = 1.1 = * Changed: CSS updates to improve compatibility * Fixed: PHP notices when saving plugin Settings = 1.0.9 = * Changed: Email field required by default = 1.0.8 = * Fixed: Name field setting always showing Required * Fixed: Debug function incorrectly requiring WP_DEBUG = 1.0.7 = * Changed: CSS tweaks * Fixed: Filter (wpforms_manage_cap) incorrectly named in some instances = 1.0.6 = * Added: Embed button inside the Form Builder * Added: Basic two column CSS class support * Added: French translation * Changed: Form names are no longer required, if no form name is provided the template name is used * Changed: Inputmask script, for better broad device support * Changed: Field specific assets are now conditionally loaded * Changed: CSS tweaks for form display * Fixed: Issue with Date/Time field * Fixed: Issue Address field preventing Country select from hiding in some configurations * Fixed: Localization string errors = 1.0.5 = * Changed: Checkboxes/Dropdown/Multiple Choice fields always show choice label value in e-mail notifications * Fixed: PHP notices inside the Form Builder * Fixed: Typo inside Form Builder tooltip = 1.0.4.2 = * Changed: Removed files not needed for WordPress.org release [Lite] = 1.0.4.1 = * Added: Check for TinyMCE in the builder before triggering TinyMCE save * Fixed: Sub labels showing when configured to hide * Fixed: Forms pagination number screen setting not saving * Fixed: Email notification setting always displaying "On" = 1.0.4 = * Changed: Improved marketing provider conditional logic * Changed: Addons page [Lite] * Fixed: Variable assignment in the builder = 1.0.3 = * Added: Basic TinyMCE editor for form confirmation messages * Changed: Removed form ID from form overview table, ID still visible in shortcode column * Fixed: Checkbox/radio form elements alignment * Fixed: Quotation slashes in email notification text * Fixed: SSL verification preventing proper API calls on some servers = 1.0.2 = * Added: Widget to display form * Added: Function to display form, `wpforms_display( $form_id )` * Changed: Default notification settings for Contact form template * Changed: Success message styling for full form theme = 1.0.1 = * Added: "From Name" and "Reply To" Setting>Notification fields * Added: Smart Tags feature to all Setting>Notification fields = 1.0.0 = * Initial release. wpforms.php 0000644 00000020062 15134366226 0006762 0 ustar 00 <?php /** * Plugin Name: WPForms Lite * Plugin URI: https://wpforms.com * Description: Beginner friendly WordPress contact form plugin. Use our Drag & Drop form builder to create your WordPress forms. * Requires at least: 5.2 * Requires PHP: 5.6 * Author: WPForms * Author URI: https://wpforms.com * Version: 1.7.6 * Text Domain: wpforms-lite * Domain Path: assets/languages * * WPForms is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * any later version. * * WPForms is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with WPForms. If not, see <https://www.gnu.org/licenses/>. */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! defined( 'WPFORMS_VERSION' ) ) { /** * Plugin version. * * @since 1.0.0 */ define( 'WPFORMS_VERSION', '1.7.6' ); } // Plugin Folder Path. if ( ! defined( 'WPFORMS_PLUGIN_DIR' ) ) { define( 'WPFORMS_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); } // Plugin Folder URL. if ( ! defined( 'WPFORMS_PLUGIN_URL' ) ) { define( 'WPFORMS_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); } // Plugin Root File. if ( ! defined( 'WPFORMS_PLUGIN_FILE' ) ) { define( 'WPFORMS_PLUGIN_FILE', __FILE__ ); } // Don't allow multiple versions to be active. if ( function_exists( 'wpforms' ) ) { if ( ! function_exists( 'wpforms_pro_just_activated' ) ) { /** * When we activate a Pro version, we need to do additional operations: * 1) deactivate a Lite version; * 2) register option which help to run all activation process for Pro version (custom tables creation, etc.). * * @since 1.6.2 */ function wpforms_pro_just_activated() { wpforms_deactivate(); add_option( 'wpforms_install', 1 ); } } add_action( 'activate_wpforms/wpforms.php', 'wpforms_pro_just_activated' ); if ( ! function_exists( 'wpforms_lite_just_activated' ) ) { /** * Store temporarily that the Lite version of the plugin was activated. * This is needed because WP does a redirect after activation and * we need to preserve this state to know whether user activated Lite or not. * * @since 1.5.8 */ function wpforms_lite_just_activated() { set_transient( 'wpforms_lite_just_activated', true ); } } add_action( 'activate_wpforms-lite/wpforms.php', 'wpforms_lite_just_activated' ); if ( ! function_exists( 'wpforms_lite_just_deactivated' ) ) { /** * Store temporarily that Lite plugin was deactivated. * Convert temporary "activated" value to a global variable, * so it is available through the request. Remove from the storage. * * @since 1.5.8 */ function wpforms_lite_just_deactivated() { global $wpforms_lite_just_activated, $wpforms_lite_just_deactivated; $wpforms_lite_just_activated = (bool) get_transient( 'wpforms_lite_just_activated' ); $wpforms_lite_just_deactivated = true; delete_transient( 'wpforms_lite_just_activated' ); } } add_action( 'deactivate_wpforms-lite/wpforms.php', 'wpforms_lite_just_deactivated' ); if ( ! function_exists( 'wpforms_deactivate' ) ) { /** * Deactivate Lite if WPForms already activated. * * @since 1.0.0 */ function wpforms_deactivate() { $plugin = 'wpforms-lite/wpforms.php'; deactivate_plugins( $plugin ); do_action( 'wpforms_plugin_deactivated', $plugin ); } } add_action( 'admin_init', 'wpforms_deactivate' ); if ( ! function_exists( 'wpforms_lite_notice' ) ) { /** * Display the notice after deactivation when Pro is still active * and user wanted to activate the Lite version of the plugin. * * @since 1.0.0 */ function wpforms_lite_notice() { global $wpforms_lite_just_activated, $wpforms_lite_just_deactivated; if ( empty( $wpforms_lite_just_activated ) || empty( $wpforms_lite_just_deactivated ) ) { return; } // Currently tried to activate Lite with Pro still active, so display the message. printf( '<div class="notice notice-warning"> <p>%1$s</p> <p>%2$s</p> </div>', esc_html__( 'Heads up!', 'wpforms-lite' ), esc_html__( 'Your site already has WPForms Pro activated. If you want to switch to WPForms Lite, please first go to Plugins → Installed Plugins and deactivate WPForms. Then, you can activate WPForms Lite.', 'wpforms-lite' ) ); if ( isset( $_GET['activate'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended unset( $_GET['activate'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended } unset( $wpforms_lite_just_activated, $wpforms_lite_just_deactivated ); } } add_action( 'admin_notices', 'wpforms_lite_notice' ); // Do not process the plugin code further. return; } // We require PHP version 5.6+ for the whole plugin to work. if ( version_compare( phpversion(), '5.6', '<' ) ) { if ( ! function_exists( 'wpforms_php52_notice' ) ) { /** * Display the notice about incompatible PHP version after deactivation. * * @since 1.5.0 */ function wpforms_php52_notice() { ?> <div class="notice notice-error"> <p> <?php printf( wp_kses( /* translators: %s - WPBeginner URL for recommended WordPress hosting. */ __( 'Your site is running an <strong>insecure version</strong> of PHP that is no longer supported. Please contact your web hosting provider to update your PHP version or switch to a <a href="%s" target="_blank" rel="noopener noreferrer">recommended WordPress hosting company</a>.', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'target' => [], 'rel' => [], ], 'strong' => [], ] ), 'https://www.wpbeginner.com/wordpress-hosting/' ); ?> <br><br> <?php printf( wp_kses( /* translators: %s - WPForms.com URL for documentation with more details. */ __( '<strong>Note:</strong> The WPForms plugin is disabled on your site until you fix the issue. <a href="%s" target="_blank" rel="noopener noreferrer">Read more for additional information.</a>', 'wpforms-lite' ), [ 'a' => [ 'href' => [], 'target' => [], 'rel' => [], ], 'strong' => [], ] ), 'https://wpforms.com/docs/supported-php-version/' ); ?> </p> </div> <?php // In case this is on plugin activation. // phpcs:disable WordPress.Security.NonceVerification.Recommended if ( isset( $_GET['activate'] ) ) { unset( $_GET['activate'] ); } // phpcs:enable WordPress.Security.NonceVerification.Recommended } } add_action( 'admin_notices', 'wpforms_php52_notice' ); // Do not process the plugin code further. return; } // We require WP version 5.2+ for the whole plugin to work. if ( version_compare( $GLOBALS['wp_version'], '5.2', '<' ) ) { if ( ! function_exists( 'wpforms_wp_notice' ) ) { /** * Display the notice about incompatible WP version after deactivation. * * @since 1.7.3 */ function wpforms_wp_notice() { ?> <div class="notice notice-error"> <p> <?php printf( /* translators: %s - WordPress version. */ esc_html__( 'The WPForms plugin is disabled because it requires WordPress %s or greater.', 'wpforms-lite' ), '5.2' ); ?> </p> </div> <?php // In case this is on plugin activation. // phpcs:disable WordPress.Security.NonceVerification.Recommended if ( isset( $_GET['activate'] ) ) { unset( $_GET['activate'] ); } // phpcs:enable WordPress.Security.NonceVerification.Recommended } } add_action( 'admin_notices', 'wpforms_wp_notice' ); // Do not process the plugin code further. return; } // Define the class and the function. require_once dirname( __FILE__ ) . '/src/WPForms.php'; wpforms(); vendor/true/punycode/src/Punycode.php 0000644 00000025217 15134366226 0013753 0 ustar 00 <?php namespace TrueBV; use TrueBV\Exception\DomainOutOfBoundsException; use TrueBV\Exception\LabelOutOfBoundsException; /** * Punycode implementation as described in RFC 3492 * * @link http://tools.ietf.org/html/rfc3492 */ class Punycode { /** * Bootstring parameter values * */ const BASE = 36; const TMIN = 1; const TMAX = 26; const SKEW = 38; const DAMP = 700; const INITIAL_BIAS = 72; const INITIAL_N = 128; const PREFIX = 'xn--'; const DELIMITER = '-'; /** * Encode table * * @param array */ protected static $encodeTable = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ); /** * Decode table * * @param array */ protected static $decodeTable = array( 'a' => 0, 'b' => 1, 'c' => 2, 'd' => 3, 'e' => 4, 'f' => 5, 'g' => 6, 'h' => 7, 'i' => 8, 'j' => 9, 'k' => 10, 'l' => 11, 'm' => 12, 'n' => 13, 'o' => 14, 'p' => 15, 'q' => 16, 'r' => 17, 's' => 18, 't' => 19, 'u' => 20, 'v' => 21, 'w' => 22, 'x' => 23, 'y' => 24, 'z' => 25, '0' => 26, '1' => 27, '2' => 28, '3' => 29, '4' => 30, '5' => 31, '6' => 32, '7' => 33, '8' => 34, '9' => 35 ); /** * Character encoding * * @param string */ protected $encoding; /** * Constructor * * @param string $encoding Character encoding */ public function __construct($encoding = 'UTF-8') { $this->encoding = $encoding; } /** * Encode a domain to its Punycode version * * @param string $input Domain name in Unicode to be encoded * @return string Punycode representation in ASCII */ public function encode($input) { $input = mb_strtolower($input, $this->encoding); $parts = explode('.', $input); foreach ($parts as &$part) { $length = strlen($part); if ($length < 1) { throw new LabelOutOfBoundsException(sprintf('The length of any one label is limited to between 1 and 63 octets, but %s given.', $length)); } $part = $this->encodePart($part); } $output = implode('.', $parts); $length = strlen($output); if ($length > 255) { throw new DomainOutOfBoundsException(sprintf('A full domain name is limited to 255 octets (including the separators), %s given.', $length)); } return $output; } /** * Encode a part of a domain name, such as tld, to its Punycode version * * @param string $input Part of a domain name * @return string Punycode representation of a domain part */ protected function encodePart($input) { $codePoints = $this->listCodePoints($input); $n = static::INITIAL_N; $bias = static::INITIAL_BIAS; $delta = 0; $h = $b = count($codePoints['basic']); $output = ''; foreach ($codePoints['basic'] as $code) { $output .= $this->codePointToChar($code); } if ($input === $output) { return $output; } if ($b > 0) { $output .= static::DELIMITER; } $codePoints['nonBasic'] = array_unique($codePoints['nonBasic']); sort($codePoints['nonBasic']); $i = 0; $length = mb_strlen($input, $this->encoding); while ($h < $length) { $m = $codePoints['nonBasic'][$i++]; $delta = $delta + ($m - $n) * ($h + 1); $n = $m; foreach ($codePoints['all'] as $c) { if ($c < $n || $c < static::INITIAL_N) { $delta++; } if ($c === $n) { $q = $delta; for ($k = static::BASE;; $k += static::BASE) { $t = $this->calculateThreshold($k, $bias); if ($q < $t) { break; } $code = $t + (($q - $t) % (static::BASE - $t)); $output .= static::$encodeTable[$code]; $q = ($q - $t) / (static::BASE - $t); } $output .= static::$encodeTable[$q]; $bias = $this->adapt($delta, $h + 1, ($h === $b)); $delta = 0; $h++; } } $delta++; $n++; } $out = static::PREFIX . $output; $length = strlen($out); if ($length > 63 || $length < 1) { throw new LabelOutOfBoundsException(sprintf('The length of any one label is limited to between 1 and 63 octets, but %s given.', $length)); } return $out; } /** * Decode a Punycode domain name to its Unicode counterpart * * @param string $input Domain name in Punycode * @return string Unicode domain name */ public function decode($input) { $input = strtolower($input); $parts = explode('.', $input); foreach ($parts as &$part) { $length = strlen($part); if ($length > 63 || $length < 1) { throw new LabelOutOfBoundsException(sprintf('The length of any one label is limited to between 1 and 63 octets, but %s given.', $length)); } if (strpos($part, static::PREFIX) !== 0) { continue; } $part = substr($part, strlen(static::PREFIX)); $part = $this->decodePart($part); } $output = implode('.', $parts); $length = strlen($output); if ($length > 255) { throw new DomainOutOfBoundsException(sprintf('A full domain name is limited to 255 octets (including the separators), %s given.', $length)); } return $output; } /** * Decode a part of domain name, such as tld * * @param string $input Part of a domain name * @return string Unicode domain part */ protected function decodePart($input) { $n = static::INITIAL_N; $i = 0; $bias = static::INITIAL_BIAS; $output = ''; $pos = strrpos($input, static::DELIMITER); if ($pos !== false) { $output = substr($input, 0, $pos++); } else { $pos = 0; } $outputLength = strlen($output); $inputLength = strlen($input); while ($pos < $inputLength) { $oldi = $i; $w = 1; for ($k = static::BASE;; $k += static::BASE) { $digit = static::$decodeTable[$input[$pos++]]; $i = $i + ($digit * $w); $t = $this->calculateThreshold($k, $bias); if ($digit < $t) { break; } $w = $w * (static::BASE - $t); } $bias = $this->adapt($i - $oldi, ++$outputLength, ($oldi === 0)); $n = $n + (int) ($i / $outputLength); $i = $i % ($outputLength); $output = mb_substr($output, 0, $i, $this->encoding) . $this->codePointToChar($n) . mb_substr($output, $i, $outputLength - 1, $this->encoding); $i++; } return $output; } /** * Calculate the bias threshold to fall between TMIN and TMAX * * @param integer $k * @param integer $bias * @return integer */ protected function calculateThreshold($k, $bias) { if ($k <= $bias + static::TMIN) { return static::TMIN; } elseif ($k >= $bias + static::TMAX) { return static::TMAX; } return $k - $bias; } /** * Bias adaptation * * @param integer $delta * @param integer $numPoints * @param boolean $firstTime * @return integer */ protected function adapt($delta, $numPoints, $firstTime) { $delta = (int) ( ($firstTime) ? $delta / static::DAMP : $delta / 2 ); $delta += (int) ($delta / $numPoints); $k = 0; while ($delta > ((static::BASE - static::TMIN) * static::TMAX) / 2) { $delta = (int) ($delta / (static::BASE - static::TMIN)); $k = $k + static::BASE; } $k = $k + (int) (((static::BASE - static::TMIN + 1) * $delta) / ($delta + static::SKEW)); return $k; } /** * List code points for a given input * * @param string $input * @return array Multi-dimension array with basic, non-basic and aggregated code points */ protected function listCodePoints($input) { $codePoints = array( 'all' => array(), 'basic' => array(), 'nonBasic' => array(), ); $length = mb_strlen($input, $this->encoding); for ($i = 0; $i < $length; $i++) { $char = mb_substr($input, $i, 1, $this->encoding); $code = $this->charToCodePoint($char); if ($code < 128) { $codePoints['all'][] = $codePoints['basic'][] = $code; } else { $codePoints['all'][] = $codePoints['nonBasic'][] = $code; } } return $codePoints; } /** * Convert a single or multi-byte character to its code point * * @param string $char * @return integer */ protected function charToCodePoint($char) { $code = ord($char[0]); if ($code < 128) { return $code; } elseif ($code < 224) { return (($code - 192) * 64) + (ord($char[1]) - 128); } elseif ($code < 240) { return (($code - 224) * 4096) + ((ord($char[1]) - 128) * 64) + (ord($char[2]) - 128); } else { return (($code - 240) * 262144) + ((ord($char[1]) - 128) * 4096) + ((ord($char[2]) - 128) * 64) + (ord($char[3]) - 128); } } /** * Convert a code point to its single or multi-byte character * * @param integer $code * @return string */ protected function codePointToChar($code) { if ($code <= 0x7F) { return chr($code); } elseif ($code <= 0x7FF) { return chr(($code >> 6) + 192) . chr(($code & 63) + 128); } elseif ($code <= 0xFFFF) { return chr(($code >> 12) + 224) . chr((($code >> 6) & 63) + 128) . chr(($code & 63) + 128); } else { return chr(($code >> 18) + 240) . chr((($code >> 12) & 63) + 128) . chr((($code >> 6) & 63) + 128) . chr(($code & 63) + 128); } } } vendor/true/punycode/src/Exception/LabelOutOfBoundsException.php 0000644 00000000331 15134366226 0021137 0 ustar 00 <?php namespace TrueBV\Exception; /** * Class LabelOutOfBoundsException * @package TrueBV\Exception * @author Sebastian Kroczek <sk@xbug.de> */ class LabelOutOfBoundsException extends OutOfBoundsException { } vendor/true/punycode/src/Exception/OutOfBoundsException.php 0000644 00000000314 15134366226 0020200 0 ustar 00 <?php namespace TrueBV\Exception; /** * Class OutOfBoundsException * @package TrueBV\Exception * @author Sebastian Kroczek <sk@xbug.de> */ class OutOfBoundsException extends \RuntimeException { } vendor/true/punycode/src/Exception/DomainOutOfBoundsException.php 0000644 00000000333 15134366226 0021331 0 ustar 00 <?php namespace TrueBV\Exception; /** * Class DomainOutOfBoundsException * @package TrueBV\Exception * @author Sebastian Kroczek <sk@xbug.de> */ class DomainOutOfBoundsException extends OutOfBoundsException { } vendor/true/punycode/LICENSE 0000644 00000002042 15134366226 0011661 0 ustar 00 Copyright (c) 2014 TrueServer B.V. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. vendor/symfony/polyfill-iconv/Iconv.php 0000644 00000054215 15134366226 0014321 0 ustar 00 <?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Polyfill\Iconv; /** * iconv implementation in pure PHP, UTF-8 centric. * * Implemented: * - iconv - Convert string to requested character encoding * - iconv_mime_decode - Decodes a MIME header field * - iconv_mime_decode_headers - Decodes multiple MIME header fields at once * - iconv_get_encoding - Retrieve internal configuration variables of iconv extension * - iconv_set_encoding - Set current setting for character encoding conversion * - iconv_mime_encode - Composes a MIME header field * - iconv_strlen - Returns the character count of string * - iconv_strpos - Finds position of first occurrence of a needle within a haystack * - iconv_strrpos - Finds the last occurrence of a needle within a haystack * - iconv_substr - Cut out part of a string * * Charsets available for conversion are defined by files * in the charset/ directory and by Iconv::$alias below. * You're welcome to send back any addition you make. * * @author Nicolas Grekas <p@tchwork.com> * * @internal */ final class Iconv { const ERROR_ILLEGAL_CHARACTER = 'iconv(): Detected an illegal character in input string'; const ERROR_WRONG_CHARSET = 'iconv(): Wrong charset, conversion from `%s\' to `%s\' is not allowed'; public static $inputEncoding = 'utf-8'; public static $outputEncoding = 'utf-8'; public static $internalEncoding = 'utf-8'; private static $alias = array( 'utf8' => 'utf-8', 'ascii' => 'us-ascii', 'tis-620' => 'iso-8859-11', 'cp1250' => 'windows-1250', 'cp1251' => 'windows-1251', 'cp1252' => 'windows-1252', 'cp1253' => 'windows-1253', 'cp1254' => 'windows-1254', 'cp1255' => 'windows-1255', 'cp1256' => 'windows-1256', 'cp1257' => 'windows-1257', 'cp1258' => 'windows-1258', 'shift-jis' => 'cp932', 'shift_jis' => 'cp932', 'latin1' => 'iso-8859-1', 'latin2' => 'iso-8859-2', 'latin3' => 'iso-8859-3', 'latin4' => 'iso-8859-4', 'latin5' => 'iso-8859-9', 'latin6' => 'iso-8859-10', 'latin7' => 'iso-8859-13', 'latin8' => 'iso-8859-14', 'latin9' => 'iso-8859-15', 'latin10' => 'iso-8859-16', 'iso8859-1' => 'iso-8859-1', 'iso8859-2' => 'iso-8859-2', 'iso8859-3' => 'iso-8859-3', 'iso8859-4' => 'iso-8859-4', 'iso8859-5' => 'iso-8859-5', 'iso8859-6' => 'iso-8859-6', 'iso8859-7' => 'iso-8859-7', 'iso8859-8' => 'iso-8859-8', 'iso8859-9' => 'iso-8859-9', 'iso8859-10' => 'iso-8859-10', 'iso8859-11' => 'iso-8859-11', 'iso8859-12' => 'iso-8859-12', 'iso8859-13' => 'iso-8859-13', 'iso8859-14' => 'iso-8859-14', 'iso8859-15' => 'iso-8859-15', 'iso8859-16' => 'iso-8859-16', 'iso_8859-1' => 'iso-8859-1', 'iso_8859-2' => 'iso-8859-2', 'iso_8859-3' => 'iso-8859-3', 'iso_8859-4' => 'iso-8859-4', 'iso_8859-5' => 'iso-8859-5', 'iso_8859-6' => 'iso-8859-6', 'iso_8859-7' => 'iso-8859-7', 'iso_8859-8' => 'iso-8859-8', 'iso_8859-9' => 'iso-8859-9', 'iso_8859-10' => 'iso-8859-10', 'iso_8859-11' => 'iso-8859-11', 'iso_8859-12' => 'iso-8859-12', 'iso_8859-13' => 'iso-8859-13', 'iso_8859-14' => 'iso-8859-14', 'iso_8859-15' => 'iso-8859-15', 'iso_8859-16' => 'iso-8859-16', 'iso88591' => 'iso-8859-1', 'iso88592' => 'iso-8859-2', 'iso88593' => 'iso-8859-3', 'iso88594' => 'iso-8859-4', 'iso88595' => 'iso-8859-5', 'iso88596' => 'iso-8859-6', 'iso88597' => 'iso-8859-7', 'iso88598' => 'iso-8859-8', 'iso88599' => 'iso-8859-9', 'iso885910' => 'iso-8859-10', 'iso885911' => 'iso-8859-11', 'iso885912' => 'iso-8859-12', 'iso885913' => 'iso-8859-13', 'iso885914' => 'iso-8859-14', 'iso885915' => 'iso-8859-15', 'iso885916' => 'iso-8859-16', ); private static $translitMap = array(); private static $convertMap = array(); private static $errorHandler; private static $lastError; private static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4); private static $isValidUtf8; public static function iconv($inCharset, $outCharset, $str) { $str = (string) $str; if ('' === $str) { return ''; } // Prepare for //IGNORE and //TRANSLIT $translit = $ignore = ''; $outCharset = strtolower($outCharset); $inCharset = strtolower($inCharset); if ('' === $outCharset) { $outCharset = 'iso-8859-1'; } if ('' === $inCharset) { $inCharset = 'iso-8859-1'; } do { $loop = false; if ('//translit' === substr($outCharset, -10)) { $loop = $translit = true; $outCharset = substr($outCharset, 0, -10); } if ('//ignore' === substr($outCharset, -8)) { $loop = $ignore = true; $outCharset = substr($outCharset, 0, -8); } } while ($loop); do { $loop = false; if ('//translit' === substr($inCharset, -10)) { $loop = true; $inCharset = substr($inCharset, 0, -10); } if ('//ignore' === substr($inCharset, -8)) { $loop = true; $inCharset = substr($inCharset, 0, -8); } } while ($loop); if (isset(self::$alias[$inCharset])) { $inCharset = self::$alias[$inCharset]; } if (isset(self::$alias[$outCharset])) { $outCharset = self::$alias[$outCharset]; } // Load charset maps if (('utf-8' !== $inCharset && !self::loadMap('from.', $inCharset, $inMap)) || ('utf-8' !== $outCharset && !self::loadMap('to.', $outCharset, $outMap))) { trigger_error(sprintf(self::ERROR_WRONG_CHARSET, $inCharset, $outCharset)); return false; } if ('utf-8' !== $inCharset) { // Convert input to UTF-8 $result = ''; if (self::mapToUtf8($result, $inMap, $str, $ignore)) { $str = $result; } else { $str = false; } self::$isValidUtf8 = true; } else { self::$isValidUtf8 = preg_match('//u', $str); if (!self::$isValidUtf8 && !$ignore) { trigger_error(self::ERROR_ILLEGAL_CHARACTER); return false; } if ('utf-8' === $outCharset) { // UTF-8 validation $str = self::utf8ToUtf8($str, $ignore); } } if ('utf-8' !== $outCharset && false !== $str) { // Convert output to UTF-8 $result = ''; if (self::mapFromUtf8($result, $outMap, $str, $ignore, $translit)) { return $result; } return false; } return $str; } public static function iconv_mime_decode_headers($str, $mode = 0, $charset = null) { if (null === $charset) { $charset = self::$internalEncoding; } if (false !== strpos($str, "\r")) { $str = strtr(str_replace("\r\n", "\n", $str), "\r", "\n"); } $str = explode("\n\n", $str, 2); $headers = array(); $str = preg_split('/\n(?![ \t])/', $str[0]); foreach ($str as $str) { $str = self::iconv_mime_decode($str, $mode, $charset); if (false === $str) { return false; } $str = explode(':', $str, 2); if (2 === \count($str)) { if (isset($headers[$str[0]])) { if (!\is_array($headers[$str[0]])) { $headers[$str[0]] = array($headers[$str[0]]); } $headers[$str[0]][] = ltrim($str[1]); } else { $headers[$str[0]] = ltrim($str[1]); } } } return $headers; } public static function iconv_mime_decode($str, $mode = 0, $charset = null) { if (null === $charset) { $charset = self::$internalEncoding; } if (ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) { $charset .= '//IGNORE'; } if (false !== strpos($str, "\r")) { $str = strtr(str_replace("\r\n", "\n", $str), "\r", "\n"); } $str = preg_split('/\n(?![ \t])/', rtrim($str), 2); $str = preg_replace('/[ \t]*\n[ \t]+/', ' ', rtrim($str[0])); $str = preg_split('/=\?([^?]+)\?([bqBQ])\?(.*?)\?=/', $str, -1, PREG_SPLIT_DELIM_CAPTURE); $result = self::iconv('utf-8', $charset, $str[0]); if (false === $result) { return false; } $i = 1; $len = \count($str); while ($i < $len) { $c = strtolower($str[$i]); if ((ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) && 'utf-8' !== $c && !isset(self::$alias[$c]) && !self::loadMap('from.', $c, $d)) { $d = false; } elseif ('B' === strtoupper($str[$i + 1])) { $d = base64_decode($str[$i + 2]); } else { $d = rawurldecode(strtr(str_replace('%', '%25', $str[$i + 2]), '=_', '% ')); } if (false !== $d) { if ('' !== $d) { if ('' === $d = self::iconv($c, $charset, $d)) { $str[$i + 3] = substr($str[$i + 3], 1); } else { $result .= $d; } } $d = self::iconv('utf-8', $charset, $str[$i + 3]); if ('' !== trim($d)) { $result .= $d; } } elseif (ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) { $result .= "=?{$str[$i]}?{$str[$i + 1]}?{$str[$i + 2]}?={$str[$i + 3]}"; } else { $result = false; break; } $i += 4; } return $result; } public static function iconv_get_encoding($type = 'all') { switch ($type) { case 'input_encoding': return self::$inputEncoding; case 'output_encoding': return self::$outputEncoding; case 'internal_encoding': return self::$internalEncoding; } return array( 'input_encoding' => self::$inputEncoding, 'output_encoding' => self::$outputEncoding, 'internal_encoding' => self::$internalEncoding, ); } public static function iconv_set_encoding($type, $charset) { switch ($type) { case 'input_encoding': self::$inputEncoding = $charset; break; case 'output_encoding': self::$outputEncoding = $charset; break; case 'internal_encoding': self::$internalEncoding = $charset; break; default: return false; } return true; } public static function iconv_mime_encode($fieldName, $fieldValue, $pref = null) { if (!\is_array($pref)) { $pref = array(); } $pref += array( 'scheme' => 'B', 'input-charset' => self::$internalEncoding, 'output-charset' => self::$internalEncoding, 'line-length' => 76, 'line-break-chars' => "\r\n", ); if (preg_match('/[\x80-\xFF]/', $fieldName)) { $fieldName = ''; } $scheme = strtoupper(substr($pref['scheme'], 0, 1)); $in = strtolower($pref['input-charset']); $out = strtolower($pref['output-charset']); if ('utf-8' !== $in && false === $fieldValue = self::iconv($in, 'utf-8', $fieldValue)) { return false; } preg_match_all('/./us', $fieldValue, $chars); $chars = isset($chars[0]) ? $chars[0] : array(); $lineBreak = (int) $pref['line-length']; $lineStart = "=?{$pref['output-charset']}?{$scheme}?"; $lineLength = \strlen($fieldName) + 2 + \strlen($lineStart) + 2; $lineOffset = \strlen($lineStart) + 3; $lineData = ''; $fieldValue = array(); $Q = 'Q' === $scheme; foreach ($chars as $c) { if ('utf-8' !== $out && false === $c = self::iconv('utf-8', $out, $c)) { return false; } $o = $Q ? $c = preg_replace_callback( '/[=_\?\x00-\x1F\x80-\xFF]/', array(__CLASS__, 'qpByteCallback'), $c ) : base64_encode($lineData.$c); if (isset($o[$lineBreak - $lineLength])) { if (!$Q) { $lineData = base64_encode($lineData); } $fieldValue[] = $lineStart.$lineData.'?='; $lineLength = $lineOffset; $lineData = ''; } $lineData .= $c; $Q && $lineLength += \strlen($c); } if ('' !== $lineData) { if (!$Q) { $lineData = base64_encode($lineData); } $fieldValue[] = $lineStart.$lineData.'?='; } return $fieldName.': '.implode($pref['line-break-chars'].' ', $fieldValue); } public static function iconv_strlen($s, $encoding = null) { static $hasXml = null; if (null === $hasXml) { $hasXml = \extension_loaded('xml'); } if ($hasXml) { return self::strlen1($s, $encoding); } return self::strlen2($s, $encoding); } public static function strlen1($s, $encoding = null) { if (null === $encoding) { $encoding = self::$internalEncoding; } if (0 !== stripos($encoding, 'utf-8') && false === $s = self::iconv($encoding, 'utf-8', $s)) { return false; } return \strlen(utf8_decode($s)); } public static function strlen2($s, $encoding = null) { if (null === $encoding) { $encoding = self::$internalEncoding; } if (0 !== stripos($encoding, 'utf-8') && false === $s = self::iconv($encoding, 'utf-8', $s)) { return false; } $ulenMask = self::$ulenMask; $i = 0; $j = 0; $len = \strlen($s); while ($i < $len) { $u = $s[$i] & "\xF0"; $i += isset($ulenMask[$u]) ? $ulenMask[$u] : 1; ++$j; } return $j; } public static function iconv_strpos($haystack, $needle, $offset = 0, $encoding = null) { if (null === $encoding) { $encoding = self::$internalEncoding; } if (0 !== stripos($encoding, 'utf-8')) { if (false === $haystack = self::iconv($encoding, 'utf-8', $haystack)) { return false; } if (false === $needle = self::iconv($encoding, 'utf-8', $needle)) { return false; } } if ($offset = (int) $offset) { $haystack = self::iconv_substr($haystack, $offset, 2147483647, 'utf-8'); } $pos = strpos($haystack, $needle); return false === $pos ? false : ($offset + ($pos ? self::iconv_strlen(substr($haystack, 0, $pos), 'utf-8') : 0)); } public static function iconv_strrpos($haystack, $needle, $encoding = null) { if (null === $encoding) { $encoding = self::$internalEncoding; } if (0 !== stripos($encoding, 'utf-8')) { if (false === $haystack = self::iconv($encoding, 'utf-8', $haystack)) { return false; } if (false === $needle = self::iconv($encoding, 'utf-8', $needle)) { return false; } } $pos = isset($needle[0]) ? strrpos($haystack, $needle) : false; return false === $pos ? false : self::iconv_strlen($pos ? substr($haystack, 0, $pos) : $haystack, 'utf-8'); } public static function iconv_substr($s, $start, $length = 2147483647, $encoding = null) { if (null === $encoding) { $encoding = self::$internalEncoding; } if (0 !== stripos($encoding, 'utf-8')) { $encoding = null; } elseif (false === $s = self::iconv($encoding, 'utf-8', $s)) { return false; } $s = (string) $s; $slen = self::iconv_strlen($s, 'utf-8'); $start = (int) $start; if (0 > $start) { $start += $slen; } if (0 > $start) { return false; } if ($start >= $slen) { return false; } $rx = $slen - $start; if (0 > $length) { $length += $rx; } if (0 === $length) { return ''; } if (0 > $length) { return false; } if ($length > $rx) { $length = $rx; } $rx = '/^'.($start ? self::pregOffset($start) : '').'('.self::pregOffset($length).')/u'; $s = preg_match($rx, $s, $s) ? $s[1] : ''; if (null === $encoding) { return $s; } return self::iconv('utf-8', $encoding, $s); } private static function loadMap($type, $charset, &$map) { if (!isset(self::$convertMap[$type.$charset])) { if (false === $map = self::getData($type.$charset)) { if ('to.' === $type && self::loadMap('from.', $charset, $map)) { $map = array_flip($map); } else { return false; } } self::$convertMap[$type.$charset] = $map; } else { $map = self::$convertMap[$type.$charset]; } return true; } private static function utf8ToUtf8($str, $ignore) { $ulenMask = self::$ulenMask; $valid = self::$isValidUtf8; $u = $str; $i = $j = 0; $len = \strlen($str); while ($i < $len) { if ($str[$i] < "\x80") { $u[$j++] = $str[$i++]; } else { $ulen = $str[$i] & "\xF0"; $ulen = isset($ulenMask[$ulen]) ? $ulenMask[$ulen] : 1; $uchr = substr($str, $i, $ulen); if (1 === $ulen || !($valid || preg_match('/^.$/us', $uchr))) { if ($ignore) { ++$i; continue; } trigger_error(self::ERROR_ILLEGAL_CHARACTER); return false; } else { $i += $ulen; } $u[$j++] = $uchr[0]; isset($uchr[1]) && 0 !== ($u[$j++] = $uchr[1]) && isset($uchr[2]) && 0 !== ($u[$j++] = $uchr[2]) && isset($uchr[3]) && 0 !== ($u[$j++] = $uchr[3]); } } return substr($u, 0, $j); } private static function mapToUtf8(&$result, array $map, $str, $ignore) { $len = \strlen($str); for ($i = 0; $i < $len; ++$i) { if (isset($str[$i + 1], $map[$str[$i].$str[$i + 1]])) { $result .= $map[$str[$i].$str[++$i]]; } elseif (isset($map[$str[$i]])) { $result .= $map[$str[$i]]; } elseif (!$ignore) { trigger_error(self::ERROR_ILLEGAL_CHARACTER); return false; } } return true; } private static function mapFromUtf8(&$result, array $map, $str, $ignore, $translit) { $ulenMask = self::$ulenMask; $valid = self::$isValidUtf8; if ($translit && !self::$translitMap) { self::$translitMap = self::getData('translit'); } $i = 0; $len = \strlen($str); while ($i < $len) { if ($str[$i] < "\x80") { $uchr = $str[$i++]; } else { $ulen = $str[$i] & "\xF0"; $ulen = isset($ulenMask[$ulen]) ? $ulenMask[$ulen] : 1; $uchr = substr($str, $i, $ulen); if ($ignore && (1 === $ulen || !($valid || preg_match('/^.$/us', $uchr)))) { ++$i; continue; } else { $i += $ulen; } } if (isset($map[$uchr])) { $result .= $map[$uchr]; } elseif ($translit) { if (isset(self::$translitMap[$uchr])) { $uchr = self::$translitMap[$uchr]; } elseif ($uchr >= "\xC3\x80") { $uchr = \Normalizer::normalize($uchr, \Normalizer::NFD); if ($uchr[0] < "\x80") { $uchr = $uchr[0]; } elseif ($ignore) { continue; } else { return false; } } elseif ($ignore) { continue; } else { return false; } $str = $uchr.substr($str, $i); $len = \strlen($str); $i = 0; } elseif (!$ignore) { return false; } } return true; } private static function qpByteCallback(array $m) { return '='.strtoupper(dechex(\ord($m[0]))); } private static function pregOffset($offset) { $rx = array(); $offset = (int) $offset; while ($offset > 65535) { $rx[] = '.{65535}'; $offset -= 65535; } return implode('', $rx).'.{'.$offset.'}'; } private static function getData($file) { if (file_exists($file = __DIR__.'/Resources/charset/'.$file.'.php')) { return require $file; } return false; } } vendor/symfony/polyfill-iconv/LICENSE 0000644 00000002051 15134366226 0013526 0 ustar 00 Copyright (c) 2015-2019 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php 0000644 00000007303 15134366226 0020440 0 ustar 00 <?php static $data = array ( '