includes();
add_action( 'wpforms_install', [ $this, 'install' ] );
add_action( 'wpforms_form_settings_notifications', [ $this, 'form_settings_notifications' ], 8, 1 );
add_action( 'wpforms_form_settings_confirmations', [ $this, 'form_settings_confirmations' ] );
add_action( 'wpforms_builder_enqueues_before', [ $this, 'builder_enqueues' ] );
add_action( 'wpforms_admin_page', [ $this, 'entries_page' ] );
add_action( 'wpforms_admin_settings_after', [ $this, 'settings_cta' ] );
add_action( 'wp_ajax_wpforms_lite_settings_upgrade', [ $this, 'settings_cta_dismiss' ] );
add_action( 'admin_enqueue_scripts', [ $this, 'admin_enqueues' ] );
add_filter( 'wpforms_helpers_templates_get_theme_template_paths', [ $this, 'add_templates' ] );
// Entries count logging for WPForms Lite.
add_action( 'wpforms_process_entry_saved', [ $this, 'entry_submit' ], 10, 5 );
add_action( 'wpforms_process_entry_saved', [ $this, 'update_entry_count' ], 10, 5 );
// Upgrade to Pro WPForms menu bar item.
add_action( 'admin_bar_menu', [ $this, 'upgrade_to_pro_menu' ], 1000 );
}
/**
* Include files.
*
* @since 1.0.0
*/
private function includes() {
}
/**
* Form notification settings, supports multiple notifications.
*
* @since 1.2.3
*
* @param object $settings
*/
public function form_settings_notifications( $settings ) {
$cc = wpforms_setting( 'email-carbon-copy', false );
$from_email = '{admin_email}';
$from_name = sanitize_text_field( get_option( 'blogname' ) );
// phpcs:disable WPForms.PHP.ValidateHooks.InvalidHookName
/**
* Allow filtering of text after the `From Name` field.
*
* @since 1.2.3
* @since 1.7.6 Added $form_data and $id arguments.
*
* @param string $value Value to be filtered.
* @param array $form_data Form data.
* @param int $id Notification ID.
*/
$from_name_after = apply_filters( 'wpforms_builder_notifications_from_name_after', '', $settings->form_data, 1 );
/**
* Allow filtering of text after the `From Email` field.
*
* @since 1.2.3
* @since 1.7.6 Added $form_data and $id arguments.
*
* @param array $value Value to be filtered.
* @param array $form_data Form data.
* @param int $id Notification ID.
*/
$from_email_after = apply_filters( 'wpforms_builder_notifications_from_email_after', '', $settings->form_data, 1 );
// phpcs:enable WPForms.PHP.ValidateHooks.InvalidHookName
// Handle backwards compatibility.
if ( empty( $settings->form_data['settings']['notifications'] ) ) {
$settings->form_data['settings']['notifications'][1]['subject'] = ! empty( $settings->form_data['settings']['notification_subject'] ) ?
$settings->form_data['settings']['notification_subject'] :
sprintf( /* translators: %s - form name. */
esc_html__( 'New %s Entry', 'wpforms-lite' ),
$settings->form->post_title
);
$settings->form_data['settings']['notifications'][1]['email'] = ! empty( $settings->form_data['settings']['notification_email'] ) ? $settings->form_data['settings']['notification_email'] : '{admin_email}';
$settings->form_data['settings']['notifications'][1]['sender_name'] = ! empty( $settings->form_data['settings']['notification_fromname'] ) ? $settings->form_data['settings']['notification_fromname'] : $from_name;
$settings->form_data['settings']['notifications'][1]['sender_address'] = ! empty( $settings->form_data['settings']['notification_fromaddress'] ) ? $settings->form_data['settings']['notification_fromaddress'] : $from_email;
$settings->form_data['settings']['notifications'][1]['replyto'] = ! empty( $settings->form_data['settings']['notification_replyto'] ) ? $settings->form_data['settings']['notification_replyto'] : '';
}
$id = 1;
echo '
';
echo '';
esc_html_e( 'Notifications', 'wpforms-lite' );
echo ' ';
echo '';
esc_html_e( 'Add New Notification', 'wpforms-lite' );
echo ' ';
echo '
';
$dismissed = get_user_meta( get_current_user_id(), 'wpforms_dismissed', true );
if ( empty( $dismissed['edu-builder-notifications-description'] ) ) {
echo '';
echo '
';
echo '
';
printf(
wp_kses( /* translators: %s - link to the WPForms.com doc article. */
__( 'Notifications are emails sent when a form is submitted. By default, these emails include entry details. For setup and customization options, including a video overview, please see our tutorial .', 'wpforms-lite' ),
[
'a' => [
'href' => [],
'rel' => [],
'target' => [],
],
]
),
esc_url( wpforms_utm_link( 'https://wpforms.com/docs/setup-form-notification-wpforms/', 'Builder Notifications', 'Form Notifications Documentation' ) )
);
echo '
';
echo '
';
printf(
wp_kses( /* translators: 1$s, %2$s - links to the WPForms.com doc articles. */
__( 'After saving these settings, be sure to test a form submission . This lets you see how emails will look, and to ensure that they are delivered successfully .', 'wpforms-lite' ),
[
'a' => [
'href' => [],
'rel' => [],
'target' => [],
],
'br' => [],
]
),
esc_url( wpforms_utm_link( 'https://wpforms.com/docs/how-to-properly-test-your-wordpress-forms-before-launching-checklist/', 'Builder Notifications', 'Testing A Form Documentation' ) ),
esc_url( wpforms_utm_link( 'https://wpforms.com/docs/troubleshooting-email-notifications/', 'Builder Notifications', 'Troubleshoot Notifications Documentation' ) )
);
echo '
';
echo '
';
}
wpforms_panel_field(
'toggle',
'settings',
'notification_enable',
$settings->form_data,
esc_html__( 'Enable Notifications', 'wpforms-lite' )
);
?>
form_data['settings']['confirmations'] ) ) {
$settings->form_data['settings']['confirmations'][1]['type'] = ! empty( $settings->form_data['settings']['confirmation_type'] ) ? $settings->form_data['settings']['confirmation_type'] : 'message';
$settings->form_data['settings']['confirmations'][1]['message'] = ! empty( $settings->form_data['settings']['confirmation_message'] ) ? $settings->form_data['settings']['confirmation_message'] : esc_html__( 'Thanks for contacting us! We will be in touch with you shortly.', 'wpforms-lite' );
$settings->form_data['settings']['confirmations'][1]['message_scroll'] = ! empty( $settings->form_data['settings']['confirmation_message_scroll'] ) ? $settings->form_data['settings']['confirmation_message_scroll'] : 1;
$settings->form_data['settings']['confirmations'][1]['page'] = ! empty( $settings->form_data['settings']['confirmation_page'] ) ? $settings->form_data['settings']['confirmation_page'] : '';
$settings->form_data['settings']['confirmations'][1]['redirect'] = ! empty( $settings->form_data['settings']['confirmation_redirect'] ) ? $settings->form_data['settings']['confirmation_redirect'] : '';
}
$field_id = 1;
echo '';
esc_html_e( 'Confirmations', 'wpforms-lite' );
echo '';
esc_html_e( 'Add New Confirmation', 'wpforms-lite' );
echo ' ';
echo '
';
?>
form_data,
esc_html__( 'Confirmation Type', 'wpforms-lite' ),
[
'default' => 'message',
'options' => [
'message' => esc_html__( 'Message', 'wpforms-lite' ),
'page' => esc_html__( 'Show Page', 'wpforms-lite' ),
'redirect' => esc_html__( 'Go to URL (Redirect)', 'wpforms-lite' ),
],
'class' => 'wpforms-panel-field-confirmations-type-wrap',
'input_class' => 'wpforms-panel-field-confirmations-type',
'parent' => 'settings',
'subsection' => $field_id,
]
);
wpforms_panel_field(
'textarea',
'confirmations',
'message',
$settings->form_data,
esc_html__( 'Confirmation Message', 'wpforms-lite' ),
[
'default' => esc_html__( 'Thanks for contacting us! We will be in touch with you shortly.', 'wpforms-lite' ),
'tinymce' => [
'editor_height' => '200',
],
'input_id' => 'wpforms-panel-field-confirmations-message-' . $field_id,
'input_class' => 'wpforms-panel-field-confirmations-message',
'parent' => 'settings',
'subsection' => $field_id,
'class' => 'wpforms-panel-field-tinymce',
'smarttags' => [
'type' => 'all',
],
]
);
wpforms_panel_field(
'toggle',
'confirmations',
'message_scroll',
$settings->form_data,
esc_html__( 'Automatically scroll to the confirmation message', 'wpforms-lite' ),
[
'input_class' => 'wpforms-panel-field-confirmations-message_scroll',
'parent' => 'settings',
'subsection' => $field_id,
]
);
wpforms_panel_field(
'select',
'confirmations',
'page',
$settings->form_data,
esc_html__( 'Confirmation Page', 'wpforms-lite' ),
[
'class' => 'wpforms-panel-field-confirmations-page-choicesjs-unflippable',
'options' => wpforms_builder_form_settings_confirmation_get_pages( $settings->form_data, $field_id ),
'input_class' => 'wpforms-panel-field-confirmations-page',
'parent' => 'settings',
'subsection' => $field_id,
'choicesjs' => [
'use_ajax' => true,
'callback_fn' => 'select_pages',
],
]
);
wpforms_panel_field(
'text',
'confirmations',
'redirect',
$settings->form_data,
esc_html__( 'Confirmation Redirect URL', 'wpforms-lite' ) . ' * ',
[
'input_class' => 'wpforms-panel-field-confirmations-redirect',
'parent' => 'settings',
'subsection' => $field_id,
]
);
/**
* Fires after each confirmation to add custom fields.
*
* @since 1.6.9
*
* @param WPForms_Builder_Panel_Settings $settings Builder panel settings.
* @param int $field_id Field ID.
*/
do_action( 'wpforms_lite_form_settings_confirmations_single_after', $settings, $field_id );
?>
sprintf(
wp_kses( /* translators: %s - WPForms.com docs page URL. */
__( 'You\'ve just turned off notification emails for this form. Since entries are not stored in WPForms Lite, notification emails are recommended for collecting entry details. For setup steps, please see our notification tutorial .', 'wpforms-lite' ),
[
'a' => [
'href' => [],
'target' => [],
'rel' => [],
],
]
),
esc_url( wpforms_utm_link( 'https://wpforms.com/docs/setup-form-notification-wpforms/', 'Builder Notifications', 'Disable Notifications Alert' ) )
),
];
$strings = apply_filters( 'wpforms_lite_builder_strings', $strings );
wp_localize_script(
'wpforms-builder-lite',
'wpforms_builder_lite',
$strings
);
}
/**
* Display upgrade notice at the bottom on the plugin settings pages.
*
* @since 1.4.7
*
* @param string $view Current view inside the plugin settings page.
*/
public function settings_cta( $view ) {
if ( get_option( 'wpforms_lite_settings_upgrade', false ) || apply_filters( 'wpforms_lite_settings_upgrade', false ) ) {
return;
}
?>
[
'class' => [],
'aria-hidden' => [],
],
]
),
str_repeat( ' ', 5 ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
);
?>
Bonus: WPForms Lite users get 50% off regular price , automatically applied at checkout.', 'wpforms-lite' ),
[
'strong' => [],
'span' => [
'class' => [],
],
]
);
?>
get( 'addons_page' )->enqueues()" );
wpforms()->get( 'addons_page' )->enqueues();
}
/**
* Addons page.
*
* @since 1.0.0
* @deprecated 1.6.7
*/
public function addons_page() {
_deprecated_function( __METHOD__, '1.6.7 of the WPForms plugin', "wpforms()->get( 'addons_page' )->output()" );
if ( ! wpforms_is_admin_page( 'addons' ) ) {
return;
}
wpforms()->get( 'addons_page' )->output();
}
/**
* Increase entries count once a form is submitted.
*
* @since 1.5.9
* @since 1.8.2 Added Payment ID.
*
* @param array $fields Set of form fields.
* @param array $entry Entry contents.
* @param array $form_data Form data.
* @param int $entry_id Entry ID.
* @param int $payment_id Payment ID for the payment form.
*/
public function update_entry_count( $fields, $entry, $form_data, $entry_id, $payment_id ) {
if ( ! empty( $form_data['spam_reason'] ) ) {
return;
}
global $wpdb;
/**
* Filters whether to allow counting entries for Lite users.
*
* @since 1.5.9
*
* @param bool $allow_entries_count True to allow, false to disallow. Default: true.
*/
if ( ! apply_filters( 'wpforms_dash_widget_allow_entries_count_lite', true ) ) { // phpcs:ignore WPForms.PHP.ValidateHooks.InvalidHookName
return;
}
$form_id = absint( $form_data['id'] );
if ( empty( $form_id ) ) {
return;
}
if ( add_post_meta( $form_id, 'wpforms_entries_count', 1, true ) ) {
return;
}
// phpcs:ignore WordPress.DB.DirectDatabaseQuery.NoCaching
$wpdb->query(
$wpdb->prepare(
"UPDATE $wpdb->postmeta
SET meta_value = meta_value + 1
WHERE post_id = %d AND meta_key = 'wpforms_entries_count'",
$form_id
)
);
}
/**
* Submit entry to the Lite Connect API.
*
* @since 1.7.4
* @since 1.8.2 Added Payment ID.
*
* @param array $fields Set of form fields.
* @param array $entry Entry contents.
* @param array $form_data Form data.
* @param int $entry_id Entry ID.
* @param int $payment_id Payment ID for the payment form.
*/
public function entry_submit( $fields, $entry, $form_data, $entry_id, $payment_id ) {
$submission = wpforms()->get( 'submission' );
$submission->register( $fields, $entry, $form_data['id'], $form_data );
// Prepare the entry args.
$entry_args = $submission->prepare_entry_data();
if ( $payment_id ) {
$entry_args['type'] = 'payment';
$entry_args['payment_id'] = $payment_id;
}
if ( ! empty( $form_data['spam_reason'] ) ) {
$entry_args['status'] = 'spam';
}
// Submit entry args and form data to the Lite Connect API.
if (
LiteConnect::is_allowed() &&
LiteConnect::is_enabled() &&
! empty( $entry_args )
) {
( new LiteConnectIntegration() )->submit( $entry_args, $form_data );
}
}
/**
* Add Lite-specific templates to the list of searchable template paths.
*
* @since 1.6.6
*
* @param array $paths Paths to templates.
*
* @return array
*/
public function add_templates( $paths ) {
$paths = (array) $paths;
$paths[102] = trailingslashit( __DIR__ . '/templates' );
return $paths;
}
/**
* Render Upgrade to Pro admin bar menu item.
*
* @since 1.7.4
*
* @param WP_Admin_Bar $wp_admin_bar WordPress Admin Bar object.
*/
public function upgrade_to_pro_menu( WP_Admin_Bar $wp_admin_bar ) {
$current_screen = is_admin() ? get_current_screen() : null;
$upgrade_utm_content = $current_screen === null ? 'Upgrade to Pro' : 'Upgrade to Pro - ' . $current_screen->base;
// phpcs:ignore WordPress.Security.NonceVerification.Recommended
$upgrade_utm_content = empty( $_GET['view'] ) ? $upgrade_utm_content : $upgrade_utm_content . ': ' . sanitize_key( $_GET['view'] );
$wp_admin_bar->add_menu(
[
'parent' => 'wpforms-menu',
'id' => 'wpforms-upgrade',
'title' => esc_html__( 'Upgrade to Pro', 'wpforms-lite' ),
'href' => esc_url( $this->admin_upgrade_link( 'admin-bar', $upgrade_utm_content ) ),
'meta' => [
'target' => '_blank',
'rel' => 'noopener noreferrer',
],
]
);
}
/**
* Upgrade link used within the various admin pages.
*
* TODO: This is a duplicate of the function in the WPForms class. We should refactor this to use the same function.
*
* @since 1.8.5.1
*
* @param string $medium URL parameter: utm_medium.
* @param string $content URL parameter: utm_content.
*
* @return string
*/
private function admin_upgrade_link( string $medium = 'link', string $content = '' ): string {
$url = 'https://wpforms.com/lite-upgrade/';
if ( wpforms()->is_pro() ) {
$license_key = wpforms_get_license_key();
$url = add_query_arg(
'license_key',
sanitize_text_field( $license_key ),
'https://wpforms.com/pricing/'
);
}
$upgrade = wpforms_utm_link( $url, apply_filters( 'wpforms_upgrade_link_medium', $medium ), $content ); // phpcs:ignore WPForms.PHP.ValidateHooks.InvalidHookName, WPForms.Comments.PHPDocHooks.RequiredHookDocumentation
/**
* Modify upgrade link.
*
* @since 1.5.1
*
* @param string $upgrade Upgrade links.
*/
return apply_filters( 'wpforms_upgrade_link', $upgrade ); // phpcs:ignore WPForms.PHP.ValidateHooks.InvalidHookName
}
/**
* Handle plugin installation upon activation.
*
* @since 1.7.4
*/
public function install() {
// Restart the import flags for Lite Connect if needed.
if ( class_exists( LiteConnectIntegration::class ) ) {
LiteConnectIntegration::maybe_restart_import_flag();
}
}
}
new WPForms_Lite();