Version History with Technical Changes - hassantafreshi/easy-form-builder GitHub Wiki
β’ 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}.
β’ 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]"
}β’ 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.
β’ 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.
β’ 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.
β’ 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 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 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.
β’ 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.
β’ 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.
β’ 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).
β’ 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.
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
β’ 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
- Fixed issue of the response box
Date : 15 June 2024
- Fixed issues of Sending email notification
Date : 8 June 2024
- Change the default response state by the admin to require admin login.
- replace function __ () to esc_html__ ()
Date:31 may 2024
- Fixed issues of Sending email notification
- 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
- Fixed issues of response box
- 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
- Improved forms preview
- Fixed mobile signature issue: Removed scroll event during signature
- Fixed form builder UI bug with captcha activation.
- Fixed UI of navigation buttons in the form builder.
- Added customized format type for sample input files.
- 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.
Code Log for Version 3.7.15:
-
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'),
- Added new phrases:
-
JS Files Updates:
- Updated
new.js:- Added new fields 'Price field' and 'Total price' to
addNewElementfunction. - Added new fields 'Price field' and 'Total price' to
addStyleColorBodyEfbfunction. - Updated
fun_offline_Efb.
- Added new fields 'Price field' and 'Total price' to
- Updated
val.js:- Added new fields 'Price field' and 'Total price' to
fields_efbvariable.
- Added new fields 'Price field' and 'Total price' to
- 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.
- A new code has been added to display a message (
- Updated
-
Public.php Changes:
- Updated
send_email_Emsfb_function:- Added 'sun' as parameters for all kinds of forms.
- Updated
pay_stripe_sub_Emsfb_apifor accepting 'from' value of the payment field. - Updated
fun_total_pay_efbto 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_messagestonew.jsand changed parameters tofun_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.
- Updated
-
Other Changes:
- Fixed SMS notification problem on payment forms in
public.php. - Removed
pay.jsfile and moved its content tonew.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-roundedwithrounded-4in 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, andval.js) with the new classrounded-4. - Added formTypeEl case to save in
valj_efb[0].typeinadmin.js. - Added
formTypeElsfunction to build the form type selector onval.js. - Called
formTypeElsto list of functions in the advanced attribute of the form setting for presenting the form type selector in the form setting menu.
- Fixed SMS notification problem on payment forms in
- 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.
- Fixed problems concerning the sending of email notifications for forms, specifically those linked to the HTML version of server support.
-
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.
-
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."