Version History with Technical Changes - hassantafreshi/easy-form-builder GitHub Wiki

v4.0.0 β€” Major Release

Complete Architecture Rewrite & New Features

Architecture & Core

β€’ Full plugin architecture rewrite β€” Restructured entire codebase with PSR-4 autoloading via Composer (vendor/autoload.php, vendor/composer/).

β€’ New main plugin class (class-Emsfb.php) β€” Centralized orchestration with lazy loading of integrations and conditional addon file inclusion.

β€’ Version constants updated β€” EMSFB_PLUGIN_VERSION set to 4.0.0, EMSFB_DB_VERSION set to 1.1.

β€’ Dev/Production mode system β€” Added EMSFB_DEV_MODE constant with option emsfb_dev_mode (values: 0/1/2). Switches server URL between demo.whitestudio.team (dev) and whitestudio.team (production). Auto-corrects on first plugin load.

β€’ Server host caching β€” Added filter emsfb_get_server_host for overriding server host detection.

β€’ New file structure β€” Separated vendor addons into vendor/ directory; admin code into includes/admin/; integrations into includes/integrations/; page builders into includes/page-builders/.

β€’ New class-Emsfb-widgets-helper.php β€” Singleton pattern for form caching and page builder form retrieval with transient-based cache (emsfb_forms_list, 1-hour TTL). Invalidates cache on save_post and deleted_post.

β€’ New class-email-handler.php β€” Dedicated email handler class with HTML email support, multi-source IP detection (HTTP_CLIENT_IP, X_FORWARDED_FOR, REMOTE_ADDR), OS detection (Windows, macOS, Linux, Android, iOS), and browser detection (Firefox, Chrome, Edge, Brave).

β€’ New class-Emsfb-requirement.php β€” Email server capability validation: checks mail(), wp_mail(), disabled functions, SMTP/sendmail configuration, and test email delivery. Stores result in option emsfb_email_status with states: ok, warning, error.

β€’ New class-Emsfb-webhook.php β€” Webhook endpoint system with REST route GET /Emsfb/v1/test/{name}/{id}.

Database Schema

β€’ New database schema with 5 core tables (all utf8mb4_unicode_ci for full multilingual support):

Table Purpose
{prefix}_emsfb_setting Plugin settings (JSON), date, edit_by, email
{prefix}_emsfb_form Form definitions β€” form_id, form_name, form_structer, form_type, form_created_by, form_email, status
{prefix}_emsfb_msg_ Form submissions β€” msg_id, form_id, track, ip, content, date, read_date, read_
{prefix}_emsfb_rsp_ Responses/replies β€” rsp_id, msg_id, content, date, read_by, rsp_by
{prefix}_emsfb_stts_ Status/analytics tracking β€” sid, fid, type_, status, ip, os, browser, uid, tc

β€’ IPv6 support β€” IP fields support 45-character addresses for full IPv4/IPv6 compatibility.

β€’ User agent tracking β€” OS and browser detection stored per submission for analytics.

β€’ Confirmation code (tracking code) β€” Unique tc field on status table for per-submission identification.

β€’ Unified payment table ({prefix}_emsfb_pay_) β€” Shared table for Stripe and PayPal: transaction_id, subscription_id, product_id, plan_id, payment status (pending, completed, failed, refunded), capture_id for refunds, payer email/name, IP, metadata.

β€’ Telegram activity log table ({prefix}_emsfb_telegram_sent_list) β€” Stores Telegram notification history.

β€’ Initial settings structure:

{
  "activeCode": "",
  "siteKey": "",
  "secretKey": "",
  "emailSupporter": "[email protected]",
  "apiKeyMap": "",
  "smtp": false,
  "bootstrap": false,
  "emailTemp": "",
  "email_key": "[random 10-char key]"
}

REST API & Endpoints

β€’ New REST API namespace Emsfb/v1 with the following endpoints:

Method Endpoint Purpose
POST /Emsfb/v1/forms/message/add Submit form (nonce validated)
POST /Emsfb/v1/forms/response/get Retrieve tracking/confirmation data
POST /Emsfb/v1/forms/response/add Add admin response to submission
POST /Emsfb/v1/forms/file/upload File upload handler
POST /Emsfb/v1/forms/recovery/efb_set_password Password recovery for login forms
POST /Emsfb/v1/autofill/get Auto-populate dataset retrieval
GET /Emsfb/v1/test/{name}/{id} Webhook test endpoint
GET /efb/v1/forms Gutenberg block form list

β€’ CORS origin validation β€” Added filter efb_allowed_cors_origins for whitelisting allowed origins.

β€’ Nonce permission checks on all REST endpoints.

Security

β€’ Shield Security silentCAPTCHA integration (class-Emsfb-shield-silentcaptcha.php) β€” IP-based invisible bot detection using WP Shield's test_ip_is_bot(). Per-form enable/disable via shield_silent_captcha field. Filters: efb_admin_localize_vars, efb_submit_bot_decision.

β€’ Google reCAPTCHA v2 β€” Maintained and improved.

β€’ Permission capability system β€” New capabilities: Emsfb, Emsfb_create, Emsfb_panel, Emsfb_addon, Emsfb_sms_efb (conditional).

β€’ Server & client-side validation β€” Comprehensive input validation on form submission.

β€’ File access validation β€” Post-activation checks via scheduled event emsfb_check_file_access_after_activation.

β€’ IP-based tracking β€” Full IP logging with IPv6 support for security auditing.

Page Builder Integrations (New)

β€’ Elementor Widget (class-Emsfb-elementor-widget.php, class-Emsfb-elementor.php) β€” Full Elementor integration with singleton pattern. Custom widget category "Easy Form Builder". Minimum Elementor version 3.0.0. Editor-specific styles.

β€’ Gutenberg Block (block.json, class-Emsfb-gutenberg-block.php, editor.js, editor.css) β€” Native WordPress block editor integration using Block API v3. REST route /efb/v1/forms for form retrieval. Supports wide and full alignment. Keywords: form, contact, easy form builder, efb, survey, questionnaire.

β€’ WPBakery Integration (class-Emsfb-wpbakery.php) β€” Element registration with vc_map(). Custom category, form selection parameter, editor asset enqueuing.

β€’ Visual Composer (VCV) Integration (class-Emsfb-visual-composer.php) β€” Shortcode-based rendering with [efb_vc_form]. VCV API element registration with localization support.

Payment System (New)

β€’ Stripe Integration (class-Emsfb-stripe-payment.php, routes-efb.php, stripe-php/) β€” Full Stripe payment processing with one-time and subscription payments. β—¦ AJAX endpoints: efb_stripe_get_payments, efb_stripe_get_payment_detail, efb_stripe_refund_payment, efb_stripe_cancel_subscription. β—¦ Payment management dashboard in admin.

β€’ PayPal Integration (class-Emsfb-paypal-handler.php, class-Emsfb-paypal-payment.php, class-Emsfb-paypal.php, routes-efb.php) β€” Full PayPal payment processing with one-time and subscription support. β—¦ Subscription management: suspend, reactivate, cancel. β—¦ Refund processing. β—¦ AJAX endpoints: efb_paypal_get_payments, efb_paypal_get_payment_detail, efb_paypal_refund_payment, efb_paypal_cancel_subscription, efb_paypal_suspend_subscription, efb_paypal_reactivate_subscription, efb_paypal_get_subscription_detail.

β€’ Unified payment table β€” Both Stripe and PayPal share {prefix}_emsfb_pay_ table. Hook: efb_register_payment_rest_routes.

Telegram Integration (New)

β€’ Telegram Bot Notifications (class-Emsfb-telegram.php, telegram-new-efb.php) β€” Real-time form submission alerts to Telegram. β—¦ Classes: telegramlistefb (admin panel), telegramsendefb (sending).

β€’ AJAX Actions: test_telegram_connection_efb, send_telegram_test_efb, save_telegram_settings_efb, load_telegram_activity_efb, clear_telegram_activity_efb.

β€’ Admin menu: Easy Form Builder > Telegram with onboarding guide (onboarding.html, guide.html).

β€’ Configuration stored in option Emsfb_telegram_efb.

Add-on System (New)

β€’ Add-on Manager (class-Emsfb-addon.php) β€” Dynamic addon loading from remote server (whitestudio.team). Dev/production mode switching. Installation status checking with file permission validation and error code reporting.

β€’ Auto-Populate Dataset (vendor/autofill/) β€” Classes: autofillefb, Emsfb\autofill_api. Dataset management for form field auto-filling. AJAX: handle_dataset_autofilled_efb. REST: POST /Emsfb/v1/autofill/get. Config: Emsfb_autofill_efb.

β€’ SMS Notifications (vendor/smssended/) β€” Class: smslistefb. SMS alerts on form submission via WSMS plugin. Pro version gating with render_pro_gate_efb(). Config: Emsfb_sms_efb.

β€’ Offline Forms (vendor/offline/) β€” JSON-based local/offline data collection capability.

β€’ Date Picker Addons β€” Hijri/Qamari (vendor/arabicdatepicker/), Jalali/Shamsi (vendor/persiadatepicker/).

β€’ Persia Pay (vendor/persiapay/) β€” Zarinpal payment gateway integration for Iranian users.

Frontend & Form Builder

β€’ Bootstrap 5 grid system β€” Full Bootstrap 5 CSS variables integration with responsive design (col-sm-12).

β€’ 40+ form field types β€” Text, email, password, tel, url, datetime-local, number, range, color, date, firstName, lastName, postalcode, address_line, switches, file upload, signature, location picker (OpenStreetMap), country/state/city, rating, NPS, 5-point scale, yes/no, image picker, and more.

β€’ Form element per-field styling β€” Border color, text color, text size (default/sm/lg), label alignment (left/center/right), mobile/desktop responsive positioning.

β€’ Shortcodes: [Easy_Form_Builder_confirmation_code_finder], [EMS_Form_Builder], [ems_form_builder].

β€’ Form types: form (standard), tracker (confirmation code lookup), userIsLogin (restricted to logged-in users).

β€’ File upload β€” Drag-and-drop with 8.3MB size limit (fileSizeLimite_emsFormBuilder).

β€’ Cache plugin compatibility β€” Detects and warns about 30+ cache plugins (wp-rocket, wp-super-cache, litespeed-cache, etc.).

β€’ jQuery dependency check β€” User-friendly fallback with React.js compatibility detection.

β€’ RTL language support β€” Full right-to-left layout for Persian, Arabic, Hebrew with admin-rtl-efb.css.

β€’ Roboto font β€” Loaded via Google Fonts for consistent typography.

Multilingual & Localization

β€’ Language detection hierarchy: WPML (icl_object_id, ICL_LANGUAGE_CODE) β†’ Polylang (pll_current_language) β†’ WordPress locale (get_locale()).

β€’ Text domain: easy-form-builder.

β€’ Locale-specific CDN β€” Farsi (fa_IR) uses cdn.easyformbuilder.ir; all others use cdn.jsdelivr.net for country/state/city JSON data.

β€’ Multilingual text caching β€” Via text_efb() with WordPress transients and emsfb_text_version for cache invalidation.

Performance

β€’ Transient-based form caching β€” Forms list cached with 1-hour TTL.

β€’ Static form list caching β€” Singleton pattern prevents duplicate queries.

β€’ Settings query caching β€” WordPress transients for settings retrieval.

β€’ Cache plugin compatibility β€” Automatic detection and cache invalidation support for 30+ cache plugins.

β€’ Lazy loading β€” Page builder integrations and addon files loaded only when needed.

β€’ Background processing β€” Async task processing via AJAX (efb_test_background, efb_process_background) and cron (efb_process_background_cron).

Admin Panel

β€’ AJAX Actions for form management: remove_id_Emsfb, get_form_id_Emsfb, update_form_Emsfb, dup_efb (duplicate form).

β€’ Message management AJAX: remove_message_id_Emsfb, get_messages_id_Emsfb, update_message_state_Emsfb, remove_messages_Emsfb.

β€’ Response/reply AJAX: get_all_response_id_Emsfb, set_replyMessage_id_Emsfb.

β€’ Settings AJAX: set_settings_Emsfb, get_track_id_Emsfb, check_email_server_efb, report_problem_Emsfb, efb_save_plan_selection.

β€’ Admin assets: admin-efb.css, style-efb.css, bootstrap.min-efb.css, bootstrap-select-efb.css, admin-rtl-efb.css, bootstrap.min-efb.js, utils-efb.js.

β€’ Google Charts integration β€” For analytics and survey result visualization.

β€’ Pro version tracking β€” Option emsfb_pro with states: -1 (expired), 0 (inactive), 1 (active), 2 (trial).

β€’ Heartbeat support β€” heartbeat_Emsfb AJAX action for real-time updates.

Hooks & Filters

Filters: β€’ emsfb_get_server_host β€” Override server host detection β€’ efb_allowed_cors_origins β€” CORS origin whitelist β€’ efb_submit_bot_decision β€” Bot detection override β€’ efb_admin_localize_vars β€” Admin JS localization data extension β€’ efb_register_payment_rest_routes β€” Payment provider route registration β€’ Emsfb_get_settings β€” Settings modification hook

Actions: β€’ emsfb_update_cache_plugins_list β€” Cache plugin detection trigger β€’ emsfb_check_file_access_after_activation β€” Post-activation file checks β€’ efb_loading_card β€” Custom loading indicator display β€’ efb_process_background_cron β€” Background processing cron

Deprecation Notice

β€’ Easy Form Builder 1.30.0 – 1.33.X is deprecated and no longer supported. β€’ Easy Form Builder 2.3.X is deprecated and no longer supported. β€’ Easy Form Builder 3.X.X is deprecated. β€’ Easy Form Builder 4.X.X is under active development (recommended).

Date: March 2026

v3.7.32

  • Fixed issue of the response box

Date : 15 June 2024

v3.7.31

  • Fixed issues of Sending email notification

Date : 8 June 2024

v3.7.30

  • Change the default response state by the admin to require admin login.
  • replace function __ () to esc_html__ ()

Date:31 may 2024

v3.7.27 ~ v3.7.29

  • Fixed issues of Sending email notification

v3.7.26

  • Fixed issues of response box
  • Added new feature: β€˜terms input field’ to form builder
  • Fixed issues of preview forms
  • Added new feature: 'Admin can response messages without login"

Date:16 may 2024

v3.7.22 ~ v3.7.25

  • Fixed issues of response box

v3.7.21

  • Change the name of all JS and CSS files to prevent conflicts.
  • CAPTCHA Issue Present Resolved on Edit Form on Easy Form Builder Panel page
  • Admins Can Now Add Responses Without Logging In
  • "Select All" Checkbox Added for Messages Section on Easy Form Builder Panel
  • Delete Button Added to Message Section on Easy Form Builder Panel 
  • "Read" Button Added to Message Section on Easy Form Builder Panel 
  • Resolved issues with changing phone number in settings.
  • Fixed issues of UI Easy Form Builder

v3.7.20

  • Improved forms preview
  • Fixed mobile signature issue: Removed scroll event during signature
  • Fixed form builder UI bug with captcha activation.

v3.7.19

  • Fixed UI of navigation buttons in the form builder.
  • Added customized format type for sample input files.

v3.7.17 , v3.7.18

  • Added a close button to the modal settings.
  • Added message for verification activation in the Pro version.
  • Updated install.php for code readability.
  • Fixed typos in public.php, functions.php, and readme.txt files.
  • Fixed UI response box in public.php file.
  • Fixed label variable bug in new.js file.
  • Removed unnecessary placeholders in new.js file.
  • Removed autocomplete from unnecessary tags in new.js file.
  • Removed type="button" from tags of submit buttons with IDs btn_send_efb, prev_efb, and next_efb based on W3C standards.
  • Cleaned up code.
  • Fixed link states and cites bug.
  • Improved UI of Form Builder.

v3.7.15 , v3.7.16

Code Log for Version 3.7.15:

  1. Function.php Changes:

    • Added new phrases:
      "prcfld" => $state && isset($ac->text->prcfld) ? $ac->text->prcfld : __('Price field','easy-form-builder'),
      "ttlprc" => $state && isset($ac->text->ttlprc) ? $ac->text->ttlprc : __('Total price','easy-form-builder'),
      "total" => $state && isset($ac->text->total) ? $ac->text->total : __('Total','easy-form-builder'),
      "mlsbjt" => $state && isset($ac->text->mlsbjt) ? $ac->text->mlsbjt : __('Email Subject','easy-form-builder'),
      "fernvtf" => $state  &&  isset($ac->text->fernvtf) ? $ac->text->fernvtf : __('The entered data does not match the form type. If you are an admin, 
       please review the form type.','easy-form-builder'),
      "fetf" => $state  &&  isset($ac->text->fetf) ? $ac->text->fetf : __('Error: Please ensure there is only one form per webpage','easy-form-builder'),
  2. JS Files Updates:

    • Updated new.js:
      • Added new fields 'Price field' and 'Total price' to addNewElement function.
      • Added new fields 'Price field' and 'Total price' to addStyleColorBodyEfb function.
      • Updated fun_offline_Efb.
    • Updated val.js:
      • Added new fields 'Price field' and 'Total price' to fields_efb variable.
    • Updated public/core.js:
      • A new code has been added to display a message (ajax_object_efm.text.fetf) to the user if there are two forms on the page.
  3. Public.php Changes:

    • Updated send_email_Emsfb_ function:
      • Added 'sun' as parameters for all kinds of forms.
      • Updated pay_stripe_sub_Emsfb_api for accepting 'from' value of the payment field.
      • Updated fun_total_pay_efb to disable the price field after payment completion.
      • Updated send_email_Emsfb_ with new parameters for email subject if added by users during form building.
      • Improved UI of the input email for password recovery in the login form.
      • Moved fun_emsFormBuilder_show_messages to new.js and changed parameters to fun_emsFormBuilder_show_messages(content, by, userIp, track, date).
      • Added validation case for 'prcfld'.
      • Fixed duplicated rows of the table matrix.
      • Updated send_email_Emsfb_ function.
      • Improved register new user email content.
      • Added new error message for validation forms after submitting data $this->lanText["fernvtf"].
      • Removed deprecated functions (fun_send_mail_emsFormBuilder, mail_send_form_api, fun_send_email_noti_efb, send_email_Emsfb).
      • Removed unused code related to the pay.js file.
      • Added validation case of 'prcfld' in public.php after the form is filled.
      • Removed unnecessary IP-related function (mail_send_form_api).
      • Removed old mode of function send_email_Emsfb.
      • Removed unused function fun_send_email_noti_efb.
    • Added function delete_old_rows_emsfb_stts_ for removing rows older than 40 days from the table.
  4. Other Changes:

    • Fixed SMS notification problem on payment forms in public.php.
    • Removed pay.js file and moved its content to new.js.
    • Improved accessibility support (ADA) for basic input fields.
    • Changed the structure of the form and moved the <form> tag position when the form is published.
    • Replaced class efb-rounded with rounded-4 in various files.
    • Added aria-required, aria-label, and aria-describedby attributes to input fields for ADA support.
    • Added autocomplete to basic input fields for ADA support.
    • Added roles to the button of the form and labels of inputs for ADA support.
    • Added a form type selector to the settings of forms.
    • Added form type selector phrases to function.php.
    • Updated JS files (admin.js, forms.js, admin/core.js, and val.js) with the new class rounded-4.
    • Added formTypeEl case to save in valj_efb[0].type in admin.js.
    • Added formTypeEls function to build the form type selector on val.js.
    • Called formTypeEls to list of functions in the advanced attribute of the form setting for presenting the form type selector in the form setting menu.

v3.7.14

  • Updated the cache cleanup function (cache_cleaner_Efb) in the class-Emsf-public.php file to resolve an issue related to the LiteSpeed Cache plugin.

do_action( 'litespeed_purge_post', $page_id );

In the earlier version, users encountered a 403 error when trying to submit a form for the second time. This problem occurred because of a conflict with the LiteSpeed Cache plugin.

v3.7.13

  • Fixed problems concerning the sending of email notifications for forms, specifically those linked to the HTML version of server support.

v3.7.12

v3.7.11

  • Updated the row statement on function.php: isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : null;

Pervious version get syntax error because when bot visit page set null to strtolower and get error.

v3.7.10

  • Updated enqueue_jquery function: (class-Emsf-public.php) Upgraded to the latest jQuery version for better performance and security.

  • Added Address Field: (val.js, new.js, admin.js) Implemented a new field specifically designed for capturing full addresses, improving data accuracy and user experience.

  • Changed Email Template Button Text: (class-Emsf-public.php, functions.php) Updated the button text to "View message and reply" for clearer user guidance.

  • Moved lan_subdomain_wsteam_efb function: (admin.js, new.js) Refactored the code by moving this function from admin.js to new.js for better organization and maintainability.

  • Fixed added last column to CSV file: (list_form.js) Addressed the functionality to append the last column to the CSV file, ensuring that it is included in the downloaded CSV file.

  • Improved Form Preview in Easy Form Builder Panel

Technical Details:

  • Refactored JavaScript Files:

Moved handle_change_event_efb to new.js for better organization.

Replaced all instances of sendBack_emsFormBuilder_pub.findIndex(x => x.id_ === id_) with the new function get_row_sendback_by_id_efb(id)

  • Created new.js for common reusable functions.

Moved sendBack_emsFormBuilder_pub to new.js for improved modularity.

  • Enhanced Preview Validation:

Added handle_change_event_efb to admin/core.js for consistent validation in both the builder and preview.

Implemented offset_view_efb in admin/core.js and public/core.js for code optimization.

  • Variables Renaming:

Replaced ajax_object_efm to efb_var across admin/core.js and new.js for clarity.

  • Functions Consolidation:

Moved sendBack_emsFormBuilder_pub from list_form.js to new.js for unified functionality.

  • Functions Updates:

Improved valid_email_emsFormBuilder in admin/core.js for enhanced email validation.

Enhanced valid_file_emsFormBuilder in admin/core.js and public/core.js for refined file validation.

Added new parameters to valid_file_emsFormBuilder in public/core.js for expanded capabilities.

  • Additional Updates:

Updated create_dadfile_efb and viewfileEfb for specific improvements

Updated all occurrences of sendBack_emsFormBuilder_pub.findIndex(x => ) to ensure that x is not null and that it has the required property."

⚠️ **GitHub.com Fallback** ⚠️