Calculated Fields Form - Version 1.1.3

Version Description

  • Allows selecting the autocomplete attribute from the fields' settings.
  • Includes the Date/Time operations module with the free and professional version of the plugin.
  • Allows passing the version number of the ChartJS library through the CFFCHART operation (Developer and Platinum versions of the plugin).
Download this release

Release Info

Developer codepeople
Plugin Icon 128x128 Calculated Fields Form
Version 1.1.3
Comparing to
See all releases

Code changes from version 1.0.463 to 1.1.3

Files changed (65) hide show
  1. README.txt +237 -238
  2. captcha/captcha.php +10 -10
  3. changelog.txt +81 -79
  4. cp_calculatedfieldsf_free.php +2 -2
  5. css/loader.css +9 -0
  6. css/spinner.gif +0 -0
  7. css/style.css +49 -21
  8. css/stylepublic.css +13 -3
  9. css/ui-bg_glass_80_eebd4d_1x400.png +0 -0
  10. css/ui-bg_glass_80_eebd4dc_1x400.png +0 -0
  11. inc/cpcff_admin_int.inc.php +66 -52
  12. inc/cpcff_admin_int_list.inc.php +15 -14
  13. inc/cpcff_amp.inc.php +6 -4
  14. inc/cpcff_auxiliary.inc.php +8 -0
  15. inc/cpcff_install_uninstall.inc.php +1 -1
  16. inc/cpcff_main.inc.php +4 -4
  17. inc/cpcff_page_builders.inc.php +17 -1
  18. inc/cpcff_session.inc.php +1 -1
  19. js/fbuilder-pro-admin.jquery.js +21 -3
  20. js/fbuilder-pro-public.jquery.js +5 -4
  21. js/fields-admin/01_fbuilder.ftext.js +1 -0
  22. js/fields-admin/02_fbuilder.fnumber.js +6 -4
  23. js/fields-admin/03_fbuilder.fcolor.js +38 -0
  24. js/fields-admin/03_fbuilder.femail.js +1 -0
  25. js/fields-admin/04_fbuilder.fdate.js +1 -0
  26. js/fields-admin/05_fbuilder.ftextarea.js +1 -0
  27. js/fields-admin/06_fbuilder.fcheck.js +1 -0
  28. js/fields-admin/07_fbuilder.fradio.js +1 -0
  29. js/fields-admin/15_fbuilder.fpagebreak.js +5 -1
  30. js/fields-admin/28_fbuilder.fcontainer.js +9 -1
  31. js/fields-admin/29_fbuilder.ffieldset.fc.js +1 -1
  32. js/fields-admin/30_fbuilder.fdiv.fc.js +1 -1
  33. js/fields-admin/32_fbuilder.fbutton.js +1 -1
  34. js/fields-admin/fbuilder.fcalculated.js +26 -10
  35. js/fields-public/01_fbuilder.ftext.js +2 -1
  36. js/fields-public/03_fbuilder.fcolor.js +29 -0
  37. js/fields-public/03_fbuilder.femail.js +2 -1
  38. js/fields-public/04_fbuilder.fdate.js +6 -4
  39. js/fields-public/05_fbuilder.ftextarea.js +2 -1
  40. js/fields-public/06_fbuilder.fcheck.js +3 -2
  41. js/fields-public/07_fbuilder.fradio.js +2 -1
  42. js/fields-public/09_fbuilder.ffile.js +6 -0
  43. js/fields-public/16_fbuilder.fsummary.js +11 -2
  44. js/fields-public/32_fbuilder.fbutton.js +7 -2
  45. js/fields-public/fbuilder.fcalculated.js +26 -13
  46. js/modules/01_mathematical_logical/admin/module_admin.js +1 -0
  47. js/modules/01_mathematical_logical/public/module_public.js +7 -0
  48. js/modules/02_datetime/admin/module_admin.js +29 -0
  49. js/modules/02_datetime/public/01_datetime.js +308 -0
  50. js/modules/02_datetime/public/module_public.js +20 -0
  51. js/modules/03_financial/admin/module_admin.js +13 -0
  52. js/modules/04_distance/admin/module_admin.js +13 -0
  53. js/modules/05_managing_fields/public/05_managing_fields.js +5 -2
  54. js/modules/07_chart/admin/module_admin.js +13 -0
  55. js/modules/08_url/admin/module_admin.js +5 -0
  56. js/modules/08_url/public/01_url.js +5 -0
  57. languages/calculated-fields-form-en_US.mo +0 -0
  58. languages/calculated-fields-form-en_US.po +160 -118
  59. pagebuilders/beaverbuilder/cff/cff.inc.php +6 -0
  60. pagebuilders/elementor/assets/elementor.css +4 -0
  61. pagebuilders/elementor/assets/elementor.js +19 -0
  62. pagebuilders/elementor/elementor.pb.php +15 -0
  63. pagebuilders/gutenberg/assets/js/gutenberg.js +29 -0
  64. pagebuilders/siteorigin/siteorigin-cpcff/fields/cff-button.class.php +33 -0
  65. pagebuilders/siteorigin/siteorigin-cpcff/siteorigin-cpcff.php +11 -0
README.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: codepeople
3
  Donate link: http://cff.dwbooster.com
4
  Tags: form,quote form,contact form,form builder,calculator,calculated,quote calculator,forms,form editor,advanced forms,payment calculator,payment,recurring payment,quote,fields,calculated field,price calculator,email,form design,paypal,equation editor,formula,equation,quote calculator,post,posts,plugin,widget,admin,sidebar,images,image,page,shortcode,products form,woocommerce,addons,layout,session,post,cookie,get,webhook,Dropbox,pdf,language
5
  Requires at least: 3.0.5
6
- Tested up to: 5.7.1
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -14,25 +14,25 @@ Calculated Fields Form allows you to create both simple and rich forms, quickly
14
 
15
  The "Calculated Fields Form" plugin allows you to create web forms with calculated fields, whose values are dynamically calculated based on other fields' values in the web form.
16
 
17
- The possibilities are unlimited. You can create forms with financial calculations, date operations to create reservation forms, calculate the products' prices. The plugin includes text operations for editing, translation, or advertising services. There are available more advanced operations such as determining the distance between addresses or generating graphs. The resulting forms are 100% mobile responsive.
18
 
19
- And the most impressive thing is that you don't need to hire a programmer to create the forms. With basic knowledges, you will have a professional form in just five minutes.
20
 
21
- Creating a form is all visual. The "Calculated Fields Form" plugin includes a form editor with multiple controls. Text fields, numeric fields, currency fields, slider controls, email fields, radio buttons, checkboxes, container fields, page breaks to create multipage forms, etc., and most importantly, calculated fields.
22
 
23
- The form editor includes the list of controls, the property bar to edit field properties easily, the dashboard where you can design your forms, and the attributes for form configuration. Also, the plugin comes with multiple predefined layouts to change the forms' appearances. And if the predefined layouts are not enough for your project, there is a style editor to customize the form's design.
24
 
25
  The "Calculated Fields Form" plugin includes integration with popular page builders:
26
 
27
- * Classic WordPress Editor.
28
- * Gutenberg Editor.
29
- * Elementor.
30
- * Page Builder by SiteOrigin.
31
- * Beaver Builder.
32
- * WPBakery Page Builder.
33
- * DIVI Builder.
34
 
35
- For other editors, it is possible to insert the form into the pages via its shortcode. Each web form has a shortcode associated that allows you to insert it wherever you want.
36
 
37
  == Features ==
38
 
@@ -40,22 +40,22 @@ For other editors, it is possible to insert the form into the pages via its shor
40
 
41
  * Visual [form builder](https://cff.dwbooster.com/documentation#form-builder) with an intuitive and interactive interface.
42
  * Includes [general-purpose controls](https://cff.dwbooster.com/documentation#common-fields) such as radio buttons, checkboxes, menu lists, date fields, slider controls, numeric fields, text currency fields, etc.
43
- * Includes [calculated fields](https://cff.dwbooster.com/documentation#calculated-fields-settings) whose values resulting from operations involving other form fields.
44
- You can insert as many calculated fields in the form as you need.
45
- * Contains advanced formula editor associated with the calculated fields with syntax highlighting and error detection.
46
- * It has many operations modules, [mathematical operations](https://cff.dwbooster.com/documentation#mathematical-module), [operations with dates](https://cff.dwbooster.com/documentation#datetime-module), [financial operations](https://cff.dwbooster.com/documentation#financial-module), [distance operations](https://cff.dwbooster.com/documentation#distance-module), text management, [operations for calling remote services](https://cff.dwbooster.com/documentation#connection-module), etc. The calculated fields can identify numbers and prices within the values of the fields.
47
- * It is distributed with several predefined forms that you can use as a starting point for your projects.
48
- * As well as several [design templates](https://cff.dwbooster.com/templates).
49
- * Supports multi-pages forms by inserting page breaks controls between fields belonging to different pages.
50
- * Allows grouping fields inside container controls (DIV and Fieldset).
51
- * It is possible to define [dependency rules](https://cff.dwbooster.com/blog/2020/03/01/dependencies/) between fields in the form, very useful in the design of wizards.
52
 
53
  = Other features: =
54
 
55
  * From the plugin configuration page, it is possible to duplicate a form by pressing the "Clone" button associated with it. By cloning a form, you can reuse the work already done.
56
  * Includes a troubleshooting and optimization area.
57
  * Allows you to disable forms in the indexing process to improve the speed of the website.
58
- * Includes a version control in the forms to be able to recover previous versions.
59
 
60
  = Predefined forms: =
61
 
@@ -67,92 +67,92 @@ You can insert as many calculated fields in the form as you need.
67
  4. Pregnancy Calculator
68
  5. Lease Calculator
69
 
70
- Which you can clone to implement your project, or you can create the form from scratch.
71
 
72
  > <strong>Calculated Fields Form Commercial</strong><br />
73
  >The free version of the "Calculated Fields Form" plugin includes only basic functionality. Other distributions (Professional, Developer, and Platinum) are available with advanced functionalities, such as sending notification emails, integration with payment gateways and external services, controls for database's connection (and connection to other data sources), complex operations, and many other features.
74
 
75
  = Features of the Profesional version: =
76
 
77
- * All the features of the free version of the plugin.
78
- * Allows submitting the data collected by the forms and [store it on the website](https://cff.dwbooster.com/documentation#check-submissions) for review.
79
- * Allows sending [notification emails](https://cff.dwbooster.com/documentation#email-settings) with the data collected by the form (as well as [confirmation emails](https://cff.dwbooster.com/documentation#copy-user) to the users).
80
- * Allows to [integrate the form to PayPal](https://cff.dwbooster.com/documentation#paypal-settings) and calculate the amount to be charged through a calculated field.
81
  Payments allow SCA (strong customer authentication), compatible with the new payment services (PSD 2) - Directive (EU).
82
- * Allows [exporting and importing forms](https://cff.dwbooster.com/documentation#import-export-form) between different WordPress.
83
- * Includes different mechanisms to protect forms, such as [Captcha](https://cff.dwbooster.com/documentation#captcha-settings), WordPress Nonce, honeypots fields.
84
- * Allows associating thank you pages to the forms. You can show a summary of the form's submission on the thank you pages.
85
- * Includes a dashboard widget to show the last week's submissions.
86
- * Allows caching the forms to increase the rendering speed.
87
- * Includes the option to [export the information submitted](https://cff.dwbooster.com/documentation#export-submissions) by the forms to a CSV file and use it with third-party tools such as Excel, OpenOffice, LibreOffice, or any other spreadsheet editor.
88
 
89
  = Features of the Developer version: =
90
 
91
- * Includes all the features of the free and professional version of the plugin.
92
- * Includes advanced [controls that connect to different data sources](https://cff.dwbooster.com/blog/2019/02/14/ds/) (databases, CSV files, posts, taxonomies, user information, and JSON objects).
93
- * Includes a [financial operations module](https://cff.dwbooster.com/documentation#financial-module).
94
- * Includes a [date and time operations module](https://cff.dwbooster.com/documentation#datetime-module).
95
- * Includes a [distance and travel time operations module](https://cff.dwbooster.com/documentation#distance-module). Uses "Google Maps".
96
- * Includes [Chart.js operations module](https://cff.dwbooster.com/documentation#chart-module) to generate charts with the form data. It uses the ChartJS.org library.
97
- * Includes a script that allows the developer to save the data collected by the form in an [external database](https://cff.dwbooster.com/documentation#third-party-database).
98
 
99
  **Includes add-ons to extend the form features and make use of third-party plugins and external services**
100
 
101
- * [SERVER SIDE EQUATION add-on](https://cff.dwbooster.com/add-ons/server-side-equations). It allows defining server-side equations.
102
- * [WooCommerce add-on](https://cff.dwbooster.com/add-ons/woocommerce). It allows you to integrate forms with WooCommerce products and calculate their prices, dimensions, and weight at the runtime.
103
- * [SalesForce add-on](https://cff.dwbooster.com/add-ons/salesforce). It allows integrating the form with the SalesForce service.
104
- * [WebHooks add-on](https://cff.dwbooster.com/add-ons/webhook). It allows sending the information collected by the form to a WebHook URL. This add-on opens countless possibilities. By connecting your form to services such as Zapier, Microsoft Flow, IFTTT, Workato, and others, you would be connecting to hundreds of third-party services (Zoho CRM, Dropbox, Mailchimp, Google Drive, Facebook, Twitter, and many others).
105
- * [Users Permissions add-on](https://cff.dwbooster.com/add-ons/users-permissions). It allows controlling the forms' access. As well as allow users to access and edit their data.
106
- * [Users Registration Form add-on](https://cff.dwbooster.com/add-ons/user-registration-form). It allows you to build a user registration form that captures the user's basic information and metadata.
107
- * [reCAPTCHA add-on](https://cff.dwbooster.com/add-ons/recaptcha). It allows replacing the basic captcha with Google reCAPTCHA to protect the forms.
108
 
109
  = Features of the Platinum version: =
110
 
111
- * All features of free, premium, and developer versions of the plugin.
112
- * [Easy Digital Downloads add-on](https://cff.dwbooster.com/add-ons/edd) to integrate the forms into the Easy Digital Downloads products and calculate their prices at the runtime.
113
- * [Google Analytics add-on](https://cff.dwbooster.com/add-ons/google-analytics) to generate usage reports in "Google Analytics" for the users' actions.
114
- * [PayPal Pro add-on](https://cff.dwbooster.com/add-ons/paypal-pro) to ask for the credit card details of payers and charge it directly into your website without any redirection through the PayPal website.
115
- * [Upload Files add-on](https://cff.dwbooster.com/add-ons/upload) to add the uploaded files into the media library and extend the files' types accepted by WordPress.
116
- * [DropBox Integration add-on](https://cff.dwbooster.com/add-ons/dropbox) to copy or move the uploaded files to a DropBox account.
117
- * [ip2location add-on](https://cff.dwbooster.com/add-ons/ip2location) to identify the users' data using the ip2location databases.
118
- * [Google Places add-on](https://cff.dwbooster.com/add-ons/google-places) to transform form fields into autocomplete address fields.
119
- * [Autocomplete Places add-on](https://cff.dwbooster.com/add-ons/autocomplete-places) to transform form fields into autocomplete address fields by using the Photon API.
120
- * [Signature add-on](https://cff.dwbooster.com/add-ons/signature) to convert form fields into "Signature" fields, allowing the users to sign the form with the mouse or touchscreens.
121
- * [iCal add-on](https://cff.dwbooster.com/add-ons/ical) to send iCal file in the notification emails to import the events into most popular calendars like Outlook and Google Calendar.
122
- * [CSV Generator add-on](https://cff.dwbooster.com/add-ons/csv-generator) to export the information collected by the form to CSV files and attach them in the notification emails.
123
- * [PDF Generator add-on](https://cff.dwbooster.com/add-ons/pdf-generator) to generate PDF files with the information collected by the forms and attach them to the notification emails.
124
- * [WebMerge add-on](https://cff.dwbooster.com/add-ons/webmerge) to integrate the forms with the FormStack documents (formerly WebMerge) to generate PDF and Office documents at runtime with the information collected by the web forms.
125
- * [PrintFriendly add-on](https://cff.dwbooster.com/add-ons/printfriendly) to generate PDF files with the PrintFriendly API and attach the resulting files to the notification emails.
126
- * [MailChimp add-on](https://cff.dwbooster.com/add-ons/mailchimp) to add new members to the MailChimp account.
127
- * [Mautic add-on](https://cff.dwbooster.com/add-ons/mautic) to add new contacts (or update the existent ones) into the Mautic Service.
128
- * [HubSpot add-on](https://cff.dwbooster.com/add-ons/hubspot) to add/update contacts in HubSpot, using the information collected by the form.
129
- * [Emma add-on](https://cff.dwbooster.com/add-ons/emma) to add new members to the Emma Service.
130
- * [Twilio add-on](https://cff.dwbooster.com/add-ons/twilio) for sending notification messages (SMS) in the forms' submissions.
131
- * [MailPoet add-on](https://cff.dwbooster.com/add-ons/mailpoet) to add new subscribers to the MailPoet's Mailing Lists (Both versions, MailPoet 2 and MailPoet 3).
132
- * [AffiliateWP add-on](https://cff.dwbooster.com/add-ons/affiliatewp) to integrate the forms with the AffiliateWP plugin.
133
- * [Authorize.Net add-on](https://cff.dwbooster.com/add-ons/authorize) to accept payments via Authorize.Net from the forms.
134
- * [Stripe add-on](https://cff.dwbooster.com/add-ons/stripe) to accept payments via the Stripe payment gateway from the form.
135
- * [Skrill Payments Integration](https://cff.dwbooster.com/add-ons/skrill) provides integration with Skrill Moneybookers payment gateway.
136
- * [TargetPay (iDeal) add-on](https://cff.dwbooster.com/add-ons/targetpay) provides integration with iDeal, the favorite Dutch payment method.
137
- * [Mollie (iDeal) add-on](https://cff.dwbooster.com/add-ons/mollie) to accept payments via iDeal.
138
- * [RedSys / Servired / Sermepa add-on](https://cff.dwbooster.com/add-ons/redsys) provides a secure interface for accepting credit card payments from most banks in Spain.
139
- * [PayTM add-on](https://cff.dwbooster.com/add-ons/paytm) provides a secure interface for accepting payments with credit cards, debit cards, net banking, wallets, and EMI.
140
- * [SagePay add-on](https://cff.dwbooster.com/add-ons/sagepay) provides a secure interface for accepting payments via SagePay.
141
- * [Sage Payment add-on](https://cff.dwbooster.com/add-ons/sagepayment) provides a secure interface for accepting payments through a secure SSL checkout system for both bankcard and virtual check transactions.
142
-
143
- Please, keep the plugin updated. Updates contain bug fixes as well as new features. The WordPress directory distributes the updates for the free version of the plugin. But for commercial versions, it would be necessary to register your copy of the plugin. The following link describes the registration process: [CLICK HERE](https://cff.dwbooster.com/documentation#register "Registering the plugin")
144
 
145
 
146
  == Other Notes ==
147
 
148
 
149
- This section mainly contains notes on features of the form builder that are too long to explain in the main description.
150
 
151
  = Conditional rules =
152
 
153
- It is possible to show or hide form fields (dependent fields) based on the options ticked in checkbox fields, radio buttons, the options selected in dropdown menus, or the result of calculated fields.
154
 
155
- The value of a dependent field is zero when it is hidden/disabled. The plugin excludes from submission the disabled form fields.
156
 
157
  [Additional details about the use of dependencies](https://cff.dwbooster.com/blog/2020/03/01/dependencies/ "Description about the use of dependencies")
158
 
@@ -160,17 +160,17 @@ The value of a dependent field is zero when it is hidden/disabled. The plugin ex
160
 
161
  The predefined values in the fields have two possible uses:
162
 
163
- 1- To fill the field by default. That makes it easier for the end-user to enter values.
164
 
165
- 2- Hint of the values to be entered in the field (like "enter your name"). To use the predefined value as a placeholder, you must tick the checkbox "Hide predefined value on click" The value will disappear once the user starts filling in the field. The calculated fields ignore placeholders from the equations.
166
 
167
- = The "User Instructions" attributes =
168
 
169
- The "User instructions" attribute in the field settings allows you to instruct the user on fill in the field. By default, the instructions appear as a smaller text on the public website. But they can be configured as tooltips.
170
 
171
  = Adding CSS layout keywords =
172
 
173
- The "Add CSS layout keywords" attribute in the fields settings allows you to apply CSS styles to fields. You must enter only the name of the CSS classes names and not their definitions.
174
 
175
  You can define the CSS classes via the "Customize Form Design" attribute in the "Form Settings" tab. This attribute contains a CSS editor with syntax highlighting and error checking.
176
 
@@ -178,7 +178,7 @@ If you want to assign several class names to the field, separate them by space c
178
 
179
  The plugin includes multiple predefined classes that you can assign to the form fields.
180
 
181
- More information about the form's design, by reading the following post in the plugin's blog:
182
 
183
  [Customizing the form's design](https://cff.dwbooster.com/blog/2020/01/12/form-design/ "Customizing the form's design")
184
 
@@ -196,17 +196,17 @@ There are other variants for displaying several fields on the same line, such as
196
 
197
  = Multi-page form =
198
 
199
- To create multi-pages forms, you must insert "Page break" controls between fields belonging to different pages.
200
 
201
  When the user presses the "Next Page" button, the plugin validates the fields in the current form. If there is any validation error (such as an unfilled required field), the plugin stops the "Next page" action.
202
 
203
  = Hidden calculated fields =
204
 
205
- Calculated fields include a checkbox in their configuration that allows to hide them from the public website. This feature is essential in those fields that we will use to calculate intermediate values or when we want to show the results only in emails or thank you pages.
206
 
207
- = Equations / formulas format for calculated fields =
208
 
209
- Below, I will include some possible formulas as examples, but the possibilities are endless.
210
 
211
  * With simple mathematical operations:
212
 
@@ -228,7 +228,7 @@ Below, I will include some possible formulas as examples, but the possibilities
228
 
229
  `PREC(fieldname2 / fieldname3, 2)`
230
 
231
- * There is an infinity of formulas that require complex structures. For example, the following formula includes conditional statements:
232
 
233
  `(function () {`
234
  `if (100 < fieldname3) return fieldname1 + fieldname2;`
@@ -245,13 +245,13 @@ Below, I will include some possible formulas as examples, but the possibilities
245
 
246
  = Operations and operators to use in equations/formulas =
247
 
248
- One of the "Calculated Fields Form" strengths is to use any valid javascript code to implement the equations/formulas.
249
 
250
  However, the plugin includes a wide variety of operations and operators to simplify the development process.
251
 
252
  [Mathematical Operations and Operators](http://cff.dwbooster.com/documentation#mathematical-module)
253
 
254
- [Conditional operations](http://cff.dwbooster.com/documentation#conditions-module)
255
 
256
  [Field Handling Operations](http://cff.dwbooster.com/documentation#managing-fields-module)
257
 
@@ -259,9 +259,9 @@ However, the plugin includes a wide variety of operations and operators to simpl
259
 
260
  [Operations for handling URLs and query strings](http://cff.dwbooster.com/documentation#url-module)
261
 
262
- In addition to the operations modules listed above, the Developer and Platinum versions of the plugin include additional modules:
263
 
264
- [Date and time operations](http://cff.dwbooster.com/documentation#datetime-module)
265
 
266
  [Financial Operations](http://cff.dwbooster.com/documentation#financial-module)
267
 
@@ -271,15 +271,15 @@ In addition to the operations modules listed above, the Developer and Platinum v
271
 
272
  = Controls available in the form generator of the "Calculated Fields Form" =
273
 
274
- The complete list of controls is available at the link: [CLICK HERE](http://cff.dwbooster.com/documentation#common-fields)
275
 
276
- = Create JavaScript variables to use in the equations from parameters received by "GET" or "POST", "SESSION" variables, or "COOKIES" =
277
 
278
- The plugin includes the shortcode [CP_CALCULATED_FIELDS_VAR] to generate javascript variables from parameters received by "GET" or "POST", "SESSION" variables, or "COOKIES":
279
 
280
  `[CP_CALCULATED_FIELDS_VAR name="..."]`
281
 
282
- In the shortcode, you must replace the "..." symbols with the name of the parameter or variable. It will be the same name for the javascript variable.
283
 
284
  For example:
285
 
@@ -291,9 +291,9 @@ The complete list of parameters accepted by the variables shortcode is available
291
 
292
  = Tips for calculating prices =
293
 
294
- One of the most frequent uses of our plugin is for price calculation. When displaying the prices of a good, you may want to split the form into two pages. The first page would request the information needed to calculate the price, and the second page would include the calculated field with the final price. Also, you could use the "Instruct. Text" fields to indicate the terms, conditions, and validity time of the offer.
295
 
296
- Note that you can make the "Instruct. Text" fields dependent on the calculated value. That allows you to vary the text displayed to the user depending on the calculated price. As often, the terms, conditions, or offers depend on the amount of the transaction.
297
 
298
  == Installation ==
299
 
@@ -309,243 +309,243 @@ To build a form, go to the menu option "Calculated Fields Form"
309
 
310
  To insert the calculated / contact form into some content or post, use the corresponding form's shortcode. Each web form has associated a shortcode.
311
 
312
- == Add ons ==
313
 
314
- The add ons are distributed only with the Developer and Platinum versions of the plugin.
315
 
316
- The plugin list the add ons in the "Add-ons area" of the settings page. For enabling the add ons, you must tick their corresponding checkbox and press the "Activate/Deactivate Add ons" button.
317
 
318
- = Server Side Equations add on - included in the Developer and Platinum versions of the plugin =
319
 
320
- The "Server-Side Equations" add-on allows defining equations with PHP code on the server-side. The calculated fields call the server-side equations via AJAX.
321
 
322
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#server-side-equations-addon "Server Side Equations add-on")
323
 
324
- = WooCommerce add on - included in the Developer and Platinum versions of the plugin =
325
 
326
- The WooCommerce add-on allows integrating the forms created by the "Calculated Fields Form" with the WooCommerce products and calculate their prices, weights, dimensions, and more at the runtime.
327
 
328
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#woocommerce-addon "WooCommerce add-on")
329
 
330
- = Easy Digital Downloads add on - included in the Platinum version of the plugin =
331
 
332
- The Easy Digital Downloads add-on allows integrating the forms created by the "Calculated Fields Form" with the EDD products and calculate their price dynamically at the runtime.
333
 
334
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#edd-addon "Easy Digital Downloads add-on")
335
 
336
- = SalesForce add on - included in the Developer and Platinum versions of the plugin =
337
 
338
- The SalesForce add-on allows adding new leads in the SalesForce account with the data collected by the forms.
339
 
340
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#salesforce-addon "SalesForce add-on")
341
 
342
- = WebHook add on - included in the Developer and Platinum versions of the plugin =
343
 
344
- The add-on allows posting the information collected by the forms to WebHooks URLs.
345
 
346
- Connecting the forms created by the plugin with services like Zapier, Microsoft Flow, Workato, or IFTTT (and many others), you would have access to hundreds of third-party services, like Zoho CRM, Dropbox, Mailchimp, Evernote, Google Drive, Facebook, Twitter, and more than 300 services [https://zapier.com/zapbook/apps/](https://zapier.com/zapbook/apps/ "Zapier"), [https://flow.microsoft.com/](https://flow.microsoft.com/ "Microsoft Flow"), [https://ifttt.com/discover](https://ifttt.com/discover "IFTTT")
347
 
348
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#webhook-addon "WebHook add-on")
349
 
350
- = Users Permissions add on - included in the Developer and Platinum versions of the plugin =
351
 
352
- The add-on allows you to control access to forms. You can allow access only to registered users, users with certain roles, or to specific users.
353
 
354
- The plugin adds a new shortcode to the plugin to list the data submitted by the logged user (it is possible to insert the new shortcode in the user's profile) and assign users permissions to edit their information or delete an entry.
355
 
356
- Also, the add-on allows limiting the number of submissions to only one per form/user.
357
 
358
  [CLICK HERE for additional information ](http://cff.dwbooster.com/documentation#users-addon "Users add-on")
359
 
360
- = User Registration Form add on - included in the Developer and Platinum versions of the plugin =
361
 
362
- The add-on allows building user registration forms. The form could collect the basic user information and metadata required by other plugins.
363
 
364
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#user-registration-form-addon "User Registration Form add-on")
365
 
366
- = reCAPTCHA add on - included in the Developer and Platinum versions of the plugin =
367
 
368
- The add-on allows protecting the forms using the Google reCAPTCHA instead of the basic captcha distributed with the plugin. reCAPTCHA is more visual and intuitive than traditional captchas.
369
 
370
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#recaptcha-addon "reCAPTCHA add-on")
371
 
372
- = Google Analytics add on - included in the Platinum version of the plugin =
373
 
374
- The "Google Analytics" add-on allows generating usage reports in "Google Analytics" for the users' actions.
375
 
376
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#google-analytics-addon "Google Analytics add-on")
377
 
378
- = PayPal Pro add on - included in the Platinum version of the plugin =
379
 
380
- PayPal Pro allows asking for the credit card details and charging them directly from your website without redirecting the user to the PayPal website. Once the user has filled the form fields and clicks the submit button, the payment is processed, and the posted data (excluding the credit card information) is stored in the WordPress database.
381
 
382
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#paypal-pro-addon "PayPal Pro add-on")
383
 
384
- = Upload Files add on - included in the Platinum version of the plugin =
385
 
386
- Every commercial version of the plugin includes the "Upload File" control to upload files from the form. However, the "Upload Files" add-on allows adding the uploaded files to the Media Library and access to them from the pages and posts of the website.
387
 
388
- WordPress restricts the files' types you can upload. The "Uploads Files" add-on allows extending the list of the accepted files.
389
 
390
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#upload-addon "Upload Files add-on")
391
 
392
- = DropBox Integration add on - included in the Platinum version of the plugin =
393
 
394
- "DropBox Integration" add-on allows copying or moving files uploaded through the forms to a DropBox account.
395
 
396
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#dropbox-addon "DropBox Integration add-on")
397
 
398
- = ip2location add on - included in the Platinum version of the plugin =
399
 
400
- The add-on allows using the ip2location databases to identify additional information of the users based on their IP. Countries, City Name, Coordinates, Weather Station, Time Zone, ZIP Code, etc.
401
 
402
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#ip2location-addon "ip2location add-on")
403
 
404
- = Google Places add on - included in the Platinum version of the plugin =
405
 
406
- The "Google Places" add-on allows transforming fields into autocomplete address fields calling the Google Places API.
407
 
408
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#google-places-addon "Google Places add-on")
409
 
410
- = Autocomplete Places add on - included in the Platinum version of the plugin =
411
 
412
- The "Autocomplete Places" add-on allows transforming fields into autocomplete address fields by calling the Photon API.
413
 
414
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#autocomplete-places-addon "Autocomplete Places add-on")
415
 
416
- = Signature add on - included in the Platinum version of the plugin =
417
 
418
- The "Signature" add-on transforms fields into "Signature" fields to allow the users to sign the form with their mouses or touchscreens.
419
 
420
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#signature-addon "Signature add-on")
421
 
422
- = iCal add on - included in the Platinum version of the plugin =
423
 
424
- The "iCal" add-on sends the users iCal files attached to the confirmation emails to import events into most popular calendars like Outlook and Google Calendar.
425
 
426
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#ical-addon "iCal add-on")
427
 
428
- = CSV Generator add on - included in the Platinum version of the plugin =
429
 
430
- The "CSV Generator" add-on exports the information collected by the form to CSV files and attaches them to the notification emails.
431
 
432
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#csv-generator-addon "CSV Generator add-on")
433
 
434
- = PDF Generator add on - included in the Platinum version of the plugin =
435
 
436
- The "PDF Generator" is an experimental add-on. It generates PDF files with the information collected by the forms and attaches them to the notification emails.
437
 
438
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#pdf-generator-addon "PDF Generator add-on")
439
 
440
- = WebMerge add on - included in the Platinum version of the plugin =
441
 
442
- The "WebMerge" add-on integrates the forms with the FormStack Documents service (formerly WebMerge) to generate PDF and Office documents with the form collected information.
443
 
444
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#webmerge-addon "WebMerge add-on")
445
 
446
- The "WebMerge" add-on allows integrating the form with the Silverpop service (today IBM Watson Campaign Automation) [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#silverpop-integration "Silverpop integration")
447
 
448
- = PrintFriendly add on - included in the Platinum version of the plugin =
449
 
450
- The "PrintFriendly" add-on sends the information collected by the forms to PrintFriendly and attaches the resulting PDF files to the notification emails.
451
 
452
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#printfriendly-addon "PrintFriendly add-on")
453
 
454
- = MailChimp add on - included in the Platinum version of the plugin =
455
 
456
- It allows adding new members to the MailChimp lists with the information collected by the form.
457
 
458
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#mailchimp-addon "MailChimp add-on")
459
 
460
- = Mautic add on - included in the Platinum version of the plugin =
461
 
462
- The "Mautic" add-on adds/updates contacts in the Mautic service with the information collected by the forms.
463
 
464
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#mautic-addon "Mautic add-on")
465
 
466
- = HubSpot add on - included in the Platinum version of the plugin =
467
 
468
- This add-on adds/updates HubSpot contacts with the information collected by the form.
469
 
470
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#hubspot-addon "HubSpot add-on")
471
 
472
- = Emma add on - included in the Platinum version of the plugin =
473
 
474
- The "Emma" add-on connects the forms to the Emma Service to add new members to the Emma groups.
475
 
476
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#emma-addon "Emma add-on")
477
 
478
- = Twilio add on - included in the Platinum version of the plugin =
479
 
480
- The "Twilio" add-on allows sending notification messages (SMS) through Twilio in the form's submissions.
481
 
482
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#twilio-addon "Twilio add-on")
483
 
484
- = MailPoet add on - included in the Platinum version of the plugin =
485
 
486
- The "MailPoet" add-on adds subscribers to the MailPoet's Mailing Lists (Both versions, MailPoet 2 and MailPoet 3).
487
 
488
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#mailpoet-addon "MailPoet add-on")
489
 
490
  = AffiliateWP add-on - included in the Platinum version of the plugin =
491
 
492
- The "AffiliateWP" add-on integrates the forms with the "AffiliateWP" plugin.
493
 
494
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#affiliatewp-addon "AffiliateWP add-on")
495
 
496
- = Authorize.Net add on - included in the Platinum version of the plugin =
497
 
498
  The Authorize.net Server Integration Method (Authorize.net SIM) is a hosted payment processing solution that handles all of the steps in processing a transaction.
499
 
500
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#authorize-addon "Authorize.Net add-on")
501
 
502
- = Stripe add on - included in the Platinum version of the plugin =
503
 
504
  The Stripe Payments add-on (www.stripe.com) provides a way to accept all major cards from customers around the world.
505
 
506
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#stripe-addon "Stripe add-on")
507
 
508
- = Skrill Payments Integration add on - included in the Platinum version of the plugin =
509
 
510
- The Skrill Payments add-on provides an interface for accepting payments through secure pages.
511
 
512
  You can accept cards, more than 20 local payment methods, and over 80 direct bank transfer connections with a single integration.
513
 
514
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#skrill-addon "Skrill add-on")
515
 
516
- = TargetPay (iDeal) add on - included in the Platinum version of the plugin =
517
 
518
- The TargetPay add-on provides integration with iDeal, the most popular Dutch payment method. The integration is made via TargetPay: [https://www.targetpay.com/info/ideal?setlang=en](https://www.targetpay.com/info/ideal?setlang=en "TargetPay")
519
 
520
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#targetpay-addon "TargetPay iDeal add-on")
521
 
522
- = Mollie (iDeal) add on - included in the Platinum version of the plugin =
523
 
524
- The Mollie add-on provides integration with iDeal, the favorite Dutch payment method.
525
 
526
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#mollie-addon "Mollie add-on")
527
 
528
- = RedSys / Servired / Sermepa add on - included in the Platinum version of the plugin =
529
 
530
- The RedSys / Servired / Sermepa add-on provides a secure interface for accepting credit card payments through most banks in Spain (Sabadell, Banco Popular, BBVA, Santander, Bankia-Caixa, Bankinter, etc.)
531
 
532
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#redsys-addon "RedSys / Servired / Sermepa TPV add-on")
533
 
534
  = PayTM add-on - included in the Platinum version of the plugin =
535
 
536
- The PayTM add-on provides a secure interface for accepting payments through credit cards, debit cards, net banking, wallets, and EMI. With over 100mn Paytm users in India, your customers will love the option to pay with their trusted PayTM Wallet.
537
 
538
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#paytm-addon "PayTM add-on")
539
 
540
  = SagePay add-on - included in the Platinum version of the plugin =
541
 
542
- The SagePay add-on provides a secure interface for accepting payments through SagePay.
543
 
544
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#sagepay-addon "SagePay add-on")
545
 
546
  = Sage Payment add-on - included in the Platinum version of the plugin =
547
 
548
- The SagePayments add-on provides an interface for accepting payments through a secure SSL-Checkout system for both bank cards and virtual check transactions. All authorized and approved transactions will be delivered into your current bank card and/or virtual check batches viewable within the Virtual Terminal for order processing and settlement.
549
 
550
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#sagepayment-addon "Sage Payment add-on")
551
 
@@ -559,7 +559,7 @@ A: [Yes, it is](http://cff.dwbooster.com/faq#q214 "Yes, it is")
559
 
560
  A: [Yes, it is](http://cff.dwbooster.com/faq#q319 "Yes, it is")
561
 
562
- = Q: What control types include the plugin? =
563
 
564
  A: The Calculated Fields Form's page contains detailed information about each field in the plugin: [Click Here](https://cff.dwbooster.com/documentation#common-fields "Click Here")
565
 
@@ -589,7 +589,7 @@ A: [List and description of date/time operations](http://cff.dwbooster.com/docum
589
 
590
  A: [List and description of financial operations](http://cff.dwbooster.com/documentation#financial-module "Financial Operations")
591
 
592
- = Q: How to calculate the payments amortization? =
593
 
594
  A: The CALCULATEAMORTIZATION is the most complex operation in the plugin and deserves its own section. Please, visit the following link to read a detailed description of its use:
595
 
@@ -611,7 +611,7 @@ A: Please, read the answer in the FAQ entry: [Click Here](http://cff.dwbooster.c
611
 
612
  A: Please, read the answer in the FAQ entry: [Click Here](http://cff.dwbooster.com/faq#q269 "FAQ Entry")
613
 
614
- = Q: How to use a parameter passed by post in the equations? =
615
 
616
  A: Please, read the answer in the FAQ entry: [Click Here](http://cff.dwbooster.com/faq#q270 "FAQ Entry")
617
 
@@ -627,7 +627,7 @@ A: Please, visit the following link to the plugin documentation. Pay attention t
627
 
628
  A: [Initializing date/time fields](http://cff.dwbooster.com/faq#q220 "FAQ Entry")
629
 
630
- = Q: How to change the language on datepicker? =
631
 
632
  A: There are different alternatives, directly through the form's structure or uploading a new file to the plugin's folder. Please, visit the following link to read the instructions: [Click Here](http://cff.dwbooster.com/faq#q221 "FAQ Entry")
633
 
@@ -660,7 +660,7 @@ Additionally, to hide the checkboxes and radio buttons, for using only the image
660
 
661
  A: [How to replace the image displayed in a Media Field?](http://cff.dwbooster.com/faq#q266 "FAQ Entry")
662
 
663
- = Q: In which order the plugin evaluates the equations associated with the calculated fields? =
664
 
665
  A: [Evaluating the equations](http://cff.dwbooster.com/faq#q79 "FAQ Entry")
666
 
@@ -674,7 +674,7 @@ Additional details in the "[PayPal Payment Configuration](https://cff.dwbooster.
674
 
675
  A: Please, read the following entry in the plugin's FAQ: [Click Here]](http://cff.dwbooster.com/faq#q225 "utf-8")
676
 
677
- = Q: The calculated form doesn't appear on the public website. Solution? =
678
 
679
  A: Please, change the "Script load method" from "Classic" to "Direct" in the "troubleshoot area" located below the forms list in the settings page of the plugin.
680
 
@@ -692,7 +692,7 @@ A: [Displaying selected values in slider control](http://cff.dwbooster.com/faq#q
692
 
693
  A: [Create new validation rules](http://cff.dwbooster.com/documentation#new-validation-rules "New Validation Rules")
694
 
695
- = Q: How to display a summary of entered data into the form? =
696
 
697
  A: Insert a summary control in the form, and enter the names of the fields to display in the summary through its settings.
698
 
@@ -720,11 +720,11 @@ A: [Creating new templates](http://cff.dwbooster.com/documentation#create-templa
720
 
721
  A: [Hiding the fields in form](http://cff.dwbooster.com/faq#q232 "FAQ Entry")
722
 
723
- = Q: Why, after assigning some of the column class names (column2, column3, column4, col-...) to a group of fields, the next field is displaced at right? =
724
 
725
  A: [You can fix this behavior by inserting a separator field between rows](http://cff.dwbooster.com/faq#q320 "FAQ Entry")
726
 
727
- = Q: How assign multiple class names to a field? =
728
 
729
  A: The class names are assigned to the fields through the attribute: "Add Css Layout Keywords"
730
 
@@ -734,11 +734,11 @@ To assign multiple class names to a field, you must separate them by space chara
734
 
735
  A: [Accepted files](http://cff.dwbooster.com/faq#q235 "FAQ Entry")
736
 
737
- = Q: How can I include the links to the uploaded files into the notification emails? =
738
 
739
  A: [Inserting the links to the uploaded files into the notification emails](http://cff.dwbooster.com/faq#q160 "FAQ Entry")
740
 
741
- = Q: Why the form builder is displaying the error message: "The entered data includes invalid characters..."? =
742
 
743
  A: If you are copying the information used to configure the form from third-party applications (like MS Word or Excel), this information can include non-valid characters. The plugin validates the form's structure to avoid this type of errors.
744
 
@@ -754,15 +754,15 @@ A: To print only the form, but not the rest of the page's content, please, follo
754
 
755
  A: To disable the dynamic evaluation of the equations in the form, you must untick the checkbox "Eval dynamically the equations associated to the calculated fields" from the "Form Settings" tab of the form builder. After disabling the dynamic evaluation of the equations, you must insert a button field with the "calculate" option as its type. The plugin evaluates the equations by pressing the calculate button.
756
 
757
- = Q: My company has different departments (like the sales department, the support group, etc.). Can I send a notification email to every department when the form be submitted? =
758
 
759
  A: Yes, that is possible. You must enter the emails' addresses separated by the comma through the "Destination emails" attribute in the form's settings.
760
 
761
- = Q: Why the user are not receiving the confirmation emails? =
762
 
763
  A: If the users are not receiving the notification emails after the form's submission, there are different possible reasons: [please, read about them here](http://cff.dwbooster.com/faq#q241 "FAQ Entry")
764
 
765
- = Q: How to insert line changes in the notification emails when the HTML format is selected? =
766
 
767
  A: If you are using the HTML format in the notification emails, you should insert BR tags for the lines changes in the emails' contents:
768
 
@@ -778,7 +778,7 @@ A: The notification emails can include all fields submitted by the form (&lt;%IN
778
 
779
  Please, visit the following link to get the complete list of tags to include in the email: [Accepted tags](https://cff.dwbooster.com/documentation#special-tags "Special tags in the notification emails and the thank you pages")
780
 
781
- = Q: How to create dependencies between fields in the notification emails and the thank you pages? =
782
 
783
  A: Please, read the answer in the FAQ page of the plugin: [Click Here](http://cff.dwbooster.com/faq#q318 "FAQ Entry")
784
 
@@ -812,7 +812,7 @@ A: Please, read the following post in the plugin's blog: [Click Here](https://cf
812
 
813
  A: Create dependencies with values of multiple fields requires the use of calculated fields. [Read more](https://cff.dwbooster.com/blog/2020/03/01/dependencies/ "Dependencies")
814
 
815
- = Q: How to prevent users vary the fields' values for paying less than the calculated price? =
816
 
817
  A: The form settings include the attribute "Base amount" to define the minimum price allowed. If a user manipulates the calculated field for paying less, the plugin applies the base amount.
818
 
@@ -820,7 +820,7 @@ A: The form settings include the attribute "Base amount" to define the minimum p
820
 
821
  A: You can enter the PayPal product's name through the "Paypal product name" attribute in the form's settings. If you enter a field's tag as the product's name, for example, &lt;%fiedname1%&gt; the product's name will be the value submitted by the fieldname1 field.
822
 
823
- = Q: How to allow to the users decide the payment frequency for recurring payments? =
824
 
825
  A: Follows the instructions below:
826
 
@@ -833,7 +833,7 @@ Tip: The maximum number of moFrequencywed by PayPal for recurring payments is 12
833
 
834
  If you allow the users to select the payment frequency, you must implement the equation to vary the amount based on the payment frequency.
835
 
836
- = Q: How to select a choice in a DropDown field, or Radio Button, based on calculated value? =
837
 
838
  A: I'll try to describe the process with some hypothetical examples. Assuming the radio button field is fieldname123, and you can select the choice with the value 5, uses the following piece of code as part of the equation associated with the calculated field:
839
 
@@ -857,7 +857,7 @@ A: Please, visit the following post in our technical blog:
857
 
858
  A: In this case, the recommendation is to use "RecordSet DS" fields as the data source: [Click Here for instructions](https://cff.dwbooster.com/blog/2019/02/14/ds/ "Recordset DS field")
859
 
860
- = Q: How to use the data submitted by a form in another one? =
861
 
862
  A: Please, read the instructions in the plugin's documentation.
863
  [Click Here](https://cff.dwbooster.com/documentation#populate-form-b-with-a "Populate the form B with the data submitted by the form A")
@@ -875,7 +875,7 @@ A: Please, read the instructions in the plugin's documentation.
875
 
876
  [Customizing the fields in the shopping cart of WooCommerce](http://cff.dwbooster.com/faq#q315 "FAQ Entry")
877
 
878
- = Q: Why the WooCommerce product is not displaying the "Add to Cart" button? =
879
 
880
  A: You must assign a price to the product through its attribute: "Regular Price" or WooCommerce won't display the "Add to Cart" button.
881
 
@@ -893,7 +893,7 @@ A: Activates and configure the DropBox add-on, distributed with the Platinum ver
893
 
894
  A: There are multiple alternatives, by using the [PDF generator add-on](https://cff.dwbooster.com/blog/2020/07/19/pdf-generator/ "PDF Generator" ), the [PrintFriendly add-on](https://cff.dwbooster.com/blog/2019/09/19/printfriendly/ "PrintFriendly") or the [WebMerge add-on](https://cff.dwbooster.com/blog/2018/10/15/webmerge/ "WebMerge").
895
 
896
- = Q: How to use an "Upload File field" with multiple selections from Zapier? =
897
 
898
  A: Please, visits the following link to get the answer to your question:
899
  [Click Here](http://cff.dwbooster.com/faq#q274 "FAQ Entry")
@@ -903,7 +903,7 @@ A: Please, visits the following link to get the answer to your question:
903
  A: Please, visits the following link to get the answer to your question:
904
  [Click Here](http://cff.dwbooster.com/faq#q312 "FAQ Entry")
905
 
906
- = Q: How to protect the form against the attacks of the spambots? =
907
 
908
  A: Please, follow the instructions described in the plugin's FAQ:
909
  [Click Here](http://cff.dwbooster.com/faq#q313 "FAQ Entry")
@@ -941,57 +941,56 @@ A: Please, follow the steps below:
941
 
942
  == Changelog ==
943
 
944
- = 1.0.463 =
945
 
946
- * Fixes a conflict with the latest update of Divi.
 
 
947
 
948
- = 1.0.462 =
949
 
950
- * Modifies the Slider control. Allow to configure them as read-only and format the typed values.
951
- * Loads the styles files as soon as possible to fix an issue with the loading form animation.
952
 
953
- = 1.0.461 =
954
 
955
- * Modifies the getURLParameter operation.
956
- * Improves the integration with the Gutenberg editor.
957
 
958
- = 1.0.460 =
959
 
960
- * Fixes a typo.
961
 
962
- = 1.0.459 =
963
 
964
- * Includes a new attribute in the calculated fields to indicate the equation's result is a currency and display the negative numbers like -$5.30
965
- * Fixes a compatibility issue with PHP 8.
 
 
966
 
967
- = 1.0.458 =
968
 
969
- * Modifies the Summary control to allow hiding the empty fields.
970
- * Improves the errors detection.
 
971
 
972
- = 1.0.457 =
973
 
974
- * The slider fields can be excluded from submission.
 
 
 
975
 
976
- = 1.0.456 =
977
 
978
- * Fixes an issue in the date controls.
979
- * Modifies the CDATE operation.
980
- * Fixes some conflicts with PHP 8.
981
- * Adds the EOMONTH operation in the Date/Time operations module (Developer and Platinum versions).
982
 
983
- = 1.0.455 =
984
 
985
- * Includes a new option in the form's settings to display a loading form animation.
986
- * Modifies the tooltips icons.
987
- * Fixes an issue displaying the tooltips on forms' pages.
988
 
989
- = 1.0.454 =
990
 
991
- * Modifies the IGNOREFIELD and ACTIVATEFIELD operations for accepting the form as the second parameter.
992
-
993
- == Upgrade Notice ==
994
-
995
- = 1.0.463 =
996
-
997
- Important note: If you are using the Professional version don't update via the WP dashboard but using your personal update link. Contact us if you need further information: http://cff.dwbooster.com/contact-us
3
  Donate link: http://cff.dwbooster.com
4
  Tags: form,quote form,contact form,form builder,calculator,calculated,quote calculator,forms,form editor,advanced forms,payment calculator,payment,recurring payment,quote,fields,calculated field,price calculator,email,form design,paypal,equation editor,formula,equation,quote calculator,post,posts,plugin,widget,admin,sidebar,images,image,page,shortcode,products form,woocommerce,addons,layout,session,post,cookie,get,webhook,Dropbox,pdf,language
5
  Requires at least: 3.0.5
6
+ Tested up to: 5.8
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
14
 
15
  The "Calculated Fields Form" plugin allows you to create web forms with calculated fields, whose values are dynamically calculated based on other fields' values in the web form.
16
 
17
+ The possibilities are unlimited. For example, you can create forms with financial calculations, date operations to create reservation forms, and calculate the product prices. The plugin includes text operations for editing, translation, or advertising services. There are more advanced operations available such as determining the distance between addresses or generating graphs. The resulting forms are 100% mobile responsive.
18
 
19
+ The most impressive thing is that you don't need to hire a programmer to create the forms. With basic knowledge, you will have a professional form in just five minutes.
20
 
21
+ Creating a form is all visual. The "Calculated Fields Form" plugin includes a form editor with multiple controls. Such as text fields, numeric fields, currency fields, slider controls, email fields, radio buttons, checkboxes, container fields, page breaks to create multipage forms, and most importantly, calculated fields.
22
 
23
+ The form editor includes a list of controls, a property bar to easily edit field properties, a dashboard where you can design your forms, and the attributes for form configuration. Also, the plugin comes with multiple predefined layouts to change the forms' appearance. If there are not enough predefined layouts for your project, there is a style editor to customize the form's design.
24
 
25
  The "Calculated Fields Form" plugin includes integration with popular page builders:
26
 
27
+ * Classic WordPress Editor
28
+ * Gutenberg Editor
29
+ * Elementor
30
+ * Page Builder by SiteOrigin
31
+ * Beaver Builder
32
+ * WPBakery Page Builder
33
+ * DIVI Builder
34
 
35
+ For other editors, it is possible to insert the form into the pages via its shortcode. Each web form has an associated shortcode that allows you to insert it wherever you want.
36
 
37
  == Features ==
38
 
40
 
41
  * Visual [form builder](https://cff.dwbooster.com/documentation#form-builder) with an intuitive and interactive interface.
42
  * Includes [general-purpose controls](https://cff.dwbooster.com/documentation#common-fields) such as radio buttons, checkboxes, menu lists, date fields, slider controls, numeric fields, text currency fields, etc.
43
+ * Includes [calculated fields](https://cff.dwbooster.com/documentation#calculated-fields-settings) whose values result from operations involving other form fields.
44
+ Insert as many calculated fields in the form as you need.
45
+ * Contains an advanced formula editor associated with the calculated fields with syntax highlighting and error detection.
46
+ * Features many operations modules: [mathematical operations](https://cff.dwbooster.com/documentation#mathematical-module), [operations with dates](https://cff.dwbooster.com/documentation#datetime-module), [financial operations](https://cff.dwbooster.com/documentation#financial-module), [distance operations](https://cff.dwbooster.com/documentation#distance-module), text management, [operations for calling remote services](https://cff.dwbooster.com/documentation#connection-module), etc. The calculated fields can identify numbers and prices within the values of the fields.
47
+ * Distributed with several predefined forms that you can use as a starting point for your projects.
48
+ * Includes several [design templates](https://cff.dwbooster.com/templates).
49
+ * Supports multi-pages forms by inserting page break controls between fields belonging to different pages.
50
+ * Allows the grouping of fields inside container controls (Div and Fieldset).
51
+ * Possible to define [dependency rules](https://cff.dwbooster.com/blog/2020/03/01/dependencies/) between fields in the form, which is very useful in the design of wizards.
52
 
53
  = Other features: =
54
 
55
  * From the plugin configuration page, it is possible to duplicate a form by pressing the "Clone" button associated with it. By cloning a form, you can reuse the work already done.
56
  * Includes a troubleshooting and optimization area.
57
  * Allows you to disable forms in the indexing process to improve the speed of the website.
58
+ * Includes a version control in the forms to recover previous versions.
59
 
60
  = Predefined forms: =
61
 
67
  4. Pregnancy Calculator
68
  5. Lease Calculator
69
 
70
+ You can clone a sample form to implement your project, or create a new form from scratch.
71
 
72
  > <strong>Calculated Fields Form Commercial</strong><br />
73
  >The free version of the "Calculated Fields Form" plugin includes only basic functionality. Other distributions (Professional, Developer, and Platinum) are available with advanced functionalities, such as sending notification emails, integration with payment gateways and external services, controls for database's connection (and connection to other data sources), complex operations, and many other features.
74
 
75
  = Features of the Profesional version: =
76
 
77
+ * Includes all the features of the free version of the plugin.
78
+ * Submit the data collected by the forms and [store it on the website](https://cff.dwbooster.com/documentation#check-submissions) for review.
79
+ * Send [notification emails](https://cff.dwbooster.com/documentation#email-settings) with the data collected by the form, as well as [confirmation emails](https://cff.dwbooster.com/documentation#copy-user) to the users.
80
+ * [Integrate the form with PayPal](https://cff.dwbooster.com/documentation#paypal-settings) and calculate the amount to be charged through a calculated field.
81
  Payments allow SCA (strong customer authentication), compatible with the new payment services (PSD 2) - Directive (EU).
82
+ * [Export and import forms](https://cff.dwbooster.com/documentation#import-export-form) between different WordPress sites.
83
+ * Different mechanisms to protect forms, such as [captcha](https://cff.dwbooster.com/documentation#captcha-settings), WordPress nonces, and honeypot fields.
84
+ * Associate "Thank You" page with the form, where you can show a summary of the form's submission.
85
+ * Dashboard widget to show the last week's submissions.
86
+ * Cache the forms to increase the rendering speed.
87
+ * [Export the information submitted](https://cff.dwbooster.com/documentation#export-submissions) by the forms to a CSV file and use it with third-party tools such as Excel, OpenOffice, LibreOffice, or any other spreadsheet editor.
88
 
89
  = Features of the Developer version: =
90
 
91
+ * Includes all the features of the free and Professional version of the plugin.
92
+ * Advanced [controls that connect to different data sources](https://cff.dwbooster.com/blog/2019/02/14/ds/) (databases, CSV files, posts, taxonomies, user information, and JSON objects).
93
+ * [Financial operations module](https://cff.dwbooster.com/documentation#financial-module).
94
+ * [Date and time operations module](https://cff.dwbooster.com/documentation#datetime-module).
95
+ * [Distance and travel time operations module](https://cff.dwbooster.com/documentation#distance-module) uses "Google Maps".
96
+ * [Chart.js operations module](https://cff.dwbooster.com/documentation#chart-module) to generate charts with the form data. Uses the ChartJS.org library.
97
+ * A script that allows the developer to save the data collected by the form in an [external database](https://cff.dwbooster.com/documentation#third-party-database).
98
 
99
  **Includes add-ons to extend the form features and make use of third-party plugins and external services**
100
 
101
+ * [Server-Side Equations add-on](https://cff.dwbooster.com/add-ons/server-side-equations): define server-side equations.
102
+ * [WooCommerce add-on](https://cff.dwbooster.com/add-ons/woocommerce): integrate forms with WooCommerce products and calculate their prices, dimensions, and weight at the runtime.
103
+ * [SalesForce add-on](https://cff.dwbooster.com/add-ons/salesforce): integrate the form with the SalesForce service.
104
+ * [WebHooks add-on](https://cff.dwbooster.com/add-ons/webhook): send the information collected by the form to a WebHook URL to open countless possibilities. By connecting your form to services such as Zapier, Microsoft Flow, IFTTT, Workato, and others, you can connect to hundreds of third-party services (e.g. Zoho CRM, Dropbox, Mailchimp, Google Drive, Facebook, Twitter, etc.).
105
+ * [User Permissions add-on](https://cff.dwbooster.com/add-ons/users-permissions): control the forms' access, as well as allowing users to access and edit their data.
106
+ * [User Registration Form add-on](https://cff.dwbooster.com/add-ons/user-registration-form): build a user registration form that captures the user's basic information and metadata.
107
+ * [reCAPTCHA add-on](https://cff.dwbooster.com/add-ons/recaptcha): replace the basic captcha with Google reCAPTCHA to protect the forms.
108
 
109
  = Features of the Platinum version: =
110
 
111
+ * Includes all the features of free, Professiona, and Developer versions of the plugin.
112
+ * [Easy Digital Downloads add-on](https://cff.dwbooster.com/add-ons/edd): integrate the forms into Easy Digital Downloads products and calculate their prices at the runtime.
113
+ * [Google Analytics add-on](https://cff.dwbooster.com/add-ons/google-analytics): generate usage reports in "Google Analytics" for the users' actions.
114
+ * [PayPal Pro add-on](https://cff.dwbooster.com/add-ons/paypal-pro): enable the payer's credit card details to be entered directly through the website without any redirection to the PayPal website.
115
+ * [Upload Files add-on](https://cff.dwbooster.com/add-ons/upload): add uploaded files to the media library and extend the file types accepted by WordPress.
116
+ * [DropBox Integration add-on](https://cff.dwbooster.com/add-ons/dropbox): copy or move the uploaded files to a DropBox account.
117
+ * [ip2location add-on](https://cff.dwbooster.com/add-ons/ip2location): identify the users' data using the ip2location databases.
118
+ * [Google Places add-on](https://cff.dwbooster.com/add-ons/google-places): transform form fields into autocomplete address fields.
119
+ * [Autocomplete Places add-on](https://cff.dwbooster.com/add-ons/autocomplete-places): transform form fields into autocomplete address fields by using the Photon API.
120
+ * [Signature add-on](https://cff.dwbooster.com/add-ons/signature): convert form fields into "Signature" fields, allowing the users to sign the form with a mouse or touchscreen.
121
+ * [iCal add-on](https://cff.dwbooster.com/add-ons/ical): send iCal file in the notification emails to import the events into most popular calendars like Outlook and Google Calendar.
122
+ * [CSV Generator add-on](https://cff.dwbooster.com/add-ons/csv-generator): export the information collected by the form to CSV files and attach these to the notification emails.
123
+ * [PDF Generator add-on](https://cff.dwbooster.com/add-ons/pdf-generator): generate PDF files with the information collected by the forms and attach them to the notification emails.
124
+ * [WebMerge add-on](https://cff.dwbooster.com/add-ons/webmerge): integrate the forms with FormStack documents (formerly WebMerge) to generate PDF and Office documents at runtime with the information collected by the web forms.
125
+ * [PrintFriendly add-on](https://cff.dwbooster.com/add-ons/printfriendly): generate PDF files with the PrintFriendly API and attach the resulting files to the notification emails.
126
+ * [Mailchimp add-on](https://cff.dwbooster.com/add-ons/mailchimp): add new members to the MailChimp account.
127
+ * [Mautic add-on](https://cff.dwbooster.com/add-ons/mautic): add new contacts (or update existing ones) into the Mautic Service.
128
+ * [HubSpot add-on](https://cff.dwbooster.com/add-ons/hubspot): add/update contacts in HubSpot, using the information collected by the form.
129
+ * [Emma add-on](https://cff.dwbooster.com/add-ons/emma): add new members to the Emma service.
130
+ * [Twilio add-on](https://cff.dwbooster.com/add-ons/twilio): send notification messages (SMS) in the forms' submissions.
131
+ * [MailPoet add-on](https://cff.dwbooster.com/add-ons/mailpoet): add new subscribers to MailPoet's Mailing Lists (MailPoet versions 2 and 3).
132
+ * [AffiliateWP add-on](https://cff.dwbooster.com/add-ons/affiliatewp): integrate the forms with the AffiliateWP plugin.
133
+ * [Authorize.Net add-on](https://cff.dwbooster.com/add-ons/authorize): accept payments via Authorize.Net from the form.
134
+ * [Stripe add-on](https://cff.dwbooster.com/add-ons/stripe): accept payments via the Stripe payment gateway from the form.
135
+ * [Skrill Payments Integration](https://cff.dwbooster.com/add-ons/skrill) add-on: integrate with the Skrill Moneybookers payment gateway.
136
+ * [TargetPay (iDeal) add-on](https://cff.dwbooster.com/add-ons/targetpay) add-on: integrate with iDeal, the popular Dutch payment method.
137
+ * [Mollie (iDeal) add-on](https://cff.dwbooster.com/add-ons/mollie): accept payments via iDeal.
138
+ * [RedSys / Servired / Sermepa add-on](https://cff.dwbooster.com/add-ons/redsys) provides: a secure interface for accepting credit card payments from most banks in Spain.
139
+ * [PayTM add-on](https://cff.dwbooster.com/add-ons/paytm): a secure interface for accepting payments with credit cards, debit cards, net banking, wallets, and EMI.
140
+ * [SagePay add-on](https://cff.dwbooster.com/add-ons/sagepay): a secure interface for accepting payments via SagePay.
141
+ * [Sage Payment add-on](https://cff.dwbooster.com/add-ons/sagepayment): a secure interface for accepting payments through a secure SSL checkout system for both bankcard and virtual check transactions.
142
+
143
+ Please keep the plugin updated. Updates contain bug fixes as well as new features. The WordPress directory distributes the updates for the free version of the plugin. But for commercial versions, it would be necessary to register your copy of the plugin. The following link describes the registration process: [CLICK HERE](https://cff.dwbooster.com/documentation#register "Registering the plugin")
144
 
145
 
146
  == Other Notes ==
147
 
148
 
149
+ This section mainly contains notes on features of the form builder that are too detailed to include in the main description.
150
 
151
  = Conditional rules =
152
 
153
+ It is possible to show or hide form fields (dependent fields) based on the options selected in checkbox fields, radio buttons, the options selected in dropdown menus, or the result of calculated fields.
154
 
155
+ The value of a dependent field is zero when it is hidden/disabled. The plugin excludes the disabled form fields from the submission.
156
 
157
  [Additional details about the use of dependencies](https://cff.dwbooster.com/blog/2020/03/01/dependencies/ "Description about the use of dependencies")
158
 
160
 
161
  The predefined values in the fields have two possible uses:
162
 
163
+ 1- To fill the field by default. This makes it easier for the end-user to enter values.
164
 
165
+ 2- Hint of the values to be entered in the field (like "Enter your name"). To use the predefined value as a placeholder, you must tick the "Hide predefined value on click" checkbox. The value will disappear once the user starts filling in the field. The calculated fields' equations ignore placeholders.
166
 
167
+ = The "User Instructions" attribute =
168
 
169
+ The "User instructions" attribute in the field settings allows you to instruct the user on how to fill in the field. By default, the instructions appear as smaller text on the public website. But they can be configured as tooltips.
170
 
171
  = Adding CSS layout keywords =
172
 
173
+ The "Add CSS layout keywords" attribute in the fields settings allows you to apply CSS styles to fields. You must only enter the name of the CSS class names, and not their definitions.
174
 
175
  You can define the CSS classes via the "Customize Form Design" attribute in the "Form Settings" tab. This attribute contains a CSS editor with syntax highlighting and error checking.
176
 
178
 
179
  The plugin includes multiple predefined classes that you can assign to the form fields.
180
 
181
+ More information about the form's design can be found by reading the following post in the plugin's blog:
182
 
183
  [Customizing the form's design](https://cff.dwbooster.com/blog/2020/01/12/form-design/ "Customizing the form's design")
184
 
196
 
197
  = Multi-page form =
198
 
199
+ To create multi-page forms, you must insert "Page break" controls between fields belonging to different pages.
200
 
201
  When the user presses the "Next Page" button, the plugin validates the fields in the current form. If there is any validation error (such as an unfilled required field), the plugin stops the "Next page" action.
202
 
203
  = Hidden calculated fields =
204
 
205
+ Calculated fields include a checkbox in the configuration that allows them to be hidden from the public website. This feature is essential in those fields that are used to calculate intermediate values or when we want to show the results only in emails or thank you pages.
206
 
207
+ = Equation / Formula format for calculated fields =
208
 
209
+ Below, some possible formulas are included as examples, but the possibilities are endless.
210
 
211
  * With simple mathematical operations:
212
 
228
 
229
  `PREC(fieldname2 / fieldname3, 2)`
230
 
231
+ * There are infinite number of formulas that can be created using complex structures. For example, the following formula includes conditional statements:
232
 
233
  `(function () {`
234
  `if (100 < fieldname3) return fieldname1 + fieldname2;`
245
 
246
  = Operations and operators to use in equations/formulas =
247
 
248
+ One of the "Calculated Fields Form" strengths is the ability to use any valid JavaScript code to implement the equations/formulas.
249
 
250
  However, the plugin includes a wide variety of operations and operators to simplify the development process.
251
 
252
  [Mathematical Operations and Operators](http://cff.dwbooster.com/documentation#mathematical-module)
253
 
254
+ [Conditional Operations](http://cff.dwbooster.com/documentation#conditions-module)
255
 
256
  [Field Handling Operations](http://cff.dwbooster.com/documentation#managing-fields-module)
257
 
259
 
260
  [Operations for handling URLs and query strings](http://cff.dwbooster.com/documentation#url-module)
261
 
262
+ In addition to the operation modules listed above, the Developer and Platinum versions of the plugin include additional modules:
263
 
264
+ [Date Time Operations](http://cff.dwbooster.com/documentation#datetime-module)
265
 
266
  [Financial Operations](http://cff.dwbooster.com/documentation#financial-module)
267
 
271
 
272
  = Controls available in the form generator of the "Calculated Fields Form" =
273
 
274
+ The complete list of controls is available from this link: [CLICK HERE](http://cff.dwbooster.com/documentation#common-fields)
275
 
276
+ = Create JavaScript variables from parameters received by "GET" or "POST", "SESSION" variables, or "COOKIES" to use in the equations =
277
 
278
+ The plugin includes the shortcode [CP_CALCULATED_FIELDS_VAR] to generate JavaScript variables from parameters received by "GET" or "POST", "SESSION" variables, or "COOKIES":
279
 
280
  `[CP_CALCULATED_FIELDS_VAR name="..."]`
281
 
282
+ In the shortcode, you must replace the "..." symbols with the name of the parameter or variable. It will be the same name for the JavaScript variable.
283
 
284
  For example:
285
 
291
 
292
  = Tips for calculating prices =
293
 
294
+ One of the most frequent uses of our plugin is for price calculation. When displaying the price of a product, you may want to split the form into two pages. The first page would request the information needed to calculate the price, and the second page would include the calculated field with the final price. Also, you could use the "Instruct. Text" fields to indicate the terms, conditions, and validity period of the offer.
295
 
296
+ Note that you can make the "Instruct. Text" fields dependent on the calculated value. This allows you to vary the text displayed to the user depending on the calculated price, as the terms, conditions, or offers often depend on the transaction amount.
297
 
298
  == Installation ==
299
 
309
 
310
  To insert the calculated / contact form into some content or post, use the corresponding form's shortcode. Each web form has associated a shortcode.
311
 
312
+ == Add-ons ==
313
 
314
+ The add-ons are only distributed with the Developer and Platinum versions of the plugin.
315
 
316
+ The plugin lists the add ons in the "Add-ons area" of the settings page. To enable the add-ons, you must tick their corresponding checkbox and press the "Activate/Deactivate Add-ons" button.
317
 
318
+ = Server-Side Equations add-on - included in the Developer and Platinum versions of the plugin =
319
 
320
+ Define equations with PHP code on the server-side. The calculated fields call the server-side equations via AJAX.
321
 
322
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#server-side-equations-addon "Server Side Equations add-on")
323
 
324
+ = WooCommerce add-on - included in the Developer and Platinum versions of the plugin =
325
 
326
+ Integrate the forms created by the "Calculated Fields Form" with WooCommerce products and calculate their prices, weights, dimensions, and more at the runtime.
327
 
328
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#woocommerce-addon "WooCommerce add-on")
329
 
330
+ = Easy Digital Downloads add-on - included in the Platinum version of the plugin =
331
 
332
+ Integrate forms created by the "Calculated Fields Form" with the Easy Digital Downloads products, and calculate their price dynamically at the runtime.
333
 
334
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#edd-addon "Easy Digital Downloads add-on")
335
 
336
+ = SalesForce add-on - included in the Developer and Platinum versions of the plugin =
337
 
338
+ Add new leads to a SalesForce account using the data collected by the forms.
339
 
340
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#salesforce-addon "SalesForce add-on")
341
 
342
+ = WebHook add-on - included in the Developer and Platinum versions of the plugin =
343
 
344
+ Post the information collected by the forms to WebHook URLs.
345
 
346
+ Through connecting the forms created by the plugin with services like Zapier, Microsoft Flow, Workato, or IFTTT (and many others), you will have access to hundreds of third-party services, like Zoho CRM, Dropbox, Mailchimp, Evernote, Google Drive, Facebook, Twitter, and more than 300 services [https://zapier.com/zapbook/apps/](https://zapier.com/zapbook/apps/ "Zapier"), [https://flow.microsoft.com/](https://flow.microsoft.com/ "Microsoft Flow"), [https://ifttt.com/discover](https://ifttt.com/discover "IFTTT")
347
 
348
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#webhook-addon "WebHook add-on")
349
 
350
+ = User Permissions add-on - included in the Developer and Platinum versions of the plugin =
351
 
352
+ Control access to forms. Access can be restricted to registered users, users with certain roles, or to specific users.
353
 
354
+ The add-on adds a new shortcode to the plugin to list the data submitted by the logged-in user (it is possible to insert the new shortcode into the user's profile) and assign user permissions to edit their information or delete an entry.
355
 
356
+ Limit the number of submissions (e.g. one submission per form/user).
357
 
358
  [CLICK HERE for additional information ](http://cff.dwbooster.com/documentation#users-addon "Users add-on")
359
 
360
+ = User Registration Form add-on - included in the Developer and Platinum versions of the plugin =
361
 
362
+ Build user registration forms. The form can collect basic user information and metadata required by other plugins.
363
 
364
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#user-registration-form-addon "User Registration Form add-on")
365
 
366
+ = reCAPTCHA add-on - included in the Developer and Platinum versions of the plugin =
367
 
368
+ Protect forms using Google reCAPTCHA instead of the basic captcha distributed with the plugin, as reCAPTCHA is more visual and intuitive than traditional captchas.
369
 
370
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#recaptcha-addon "reCAPTCHA add-on")
371
 
372
+ = Google Analytics add-on - included in the Platinum version of the plugin =
373
 
374
+ Generate usage reports in "Google Analytics" for the users' actions.
375
 
376
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#google-analytics-addon "Google Analytics add-on")
377
 
378
+ = PayPal Pro add-on - included in the Platinum version of the plugin =
379
 
380
+ Allow the user to enter their credit card details directly on your website without redirecting them to the PayPal website. Once the user has filled the form fields and clicked the submit button, the payment is processed and the posted data (excluding the credit card information) is stored in the WordPress database.
381
 
382
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#paypal-pro-addon "PayPal Pro add-on")
383
 
384
+ = Upload Files add-on - included in the Platinum version of the plugin =
385
 
386
+ Every commercial version of the plugin includes the "Upload File" control to upload files from the form. However, the "Upload Files" add-on allows the uploaded files to be added to the Media Library and be accessed from the pages and posts of the website.
387
 
388
+ WordPress restricts the file types that can be uploaded. The "Uploads Files" add-on allows the list of accepted files to be extended.
389
 
390
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#upload-addon "Upload Files add-on")
391
 
392
+ = DropBox Integration add-on - included in the Platinum version of the plugin =
393
 
394
+ Copy or move files uploaded through the forms to a DropBox account.
395
 
396
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#dropbox-addon "DropBox Integration add-on")
397
 
398
+ = ip2location add-on - included in the Platinum version of the plugin =
399
 
400
+ Use the ip2location databases to identify additional user information based on their IP. Address such as country, city, coordinates, weather station, time zone, ZIP code, etc.
401
 
402
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#ip2location-addon "ip2location add-on")
403
 
404
+ = Google Places add-on - included in the Platinum version of the plugin =
405
 
406
+ Transform fields into autocomplete address fields calling the Google Places API.
407
 
408
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#google-places-addon "Google Places add-on")
409
 
410
+ = Autocomplete Places add-on - included in the Platinum version of the plugin =
411
 
412
+ Transform fields into autocomplete address fields by calling the Photon API.
413
 
414
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#autocomplete-places-addon "Autocomplete Places add-on")
415
 
416
+ = Signature add-on - included in the Platinum version of the plugin =
417
 
418
+ Transform fields into "Signature" fields to allow the users to sign the form with their mouse or touchscreens.
419
 
420
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#signature-addon "Signature add-on")
421
 
422
+ = iCal add-on - included in the Platinum version of the plugin =
423
 
424
+ Send the users iCal files attached to the confirmation emails to import events into the most popular calendars like Outlook and Google Calendar.
425
 
426
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#ical-addon "iCal add-on")
427
 
428
+ = CSV Generator add-on - included in the Platinum version of the plugin =
429
 
430
+ Export the information collected by the form to CSV files and attach them to the notification emails.
431
 
432
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#csv-generator-addon "CSV Generator add-on")
433
 
434
+ = PDF Generator add-on - included in the Platinum version of the plugin =
435
 
436
+ An experimental add-on that generates PDF files with the information collected by the forms and attaches them to the notification emails.
437
 
438
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#pdf-generator-addon "PDF Generator add-on")
439
 
440
+ = WebMerge add-on - included in the Platinum version of the plugin =
441
 
442
+ Integrate the forms with the FormStack Documents service (formerly WebMerge) to generate PDF and Office documents with the information collected from the form.
443
 
444
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#webmerge-addon "WebMerge add-on")
445
 
446
+ Integrate the form with the Silverpop service (now: IBM Watson Campaign Automation) [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#silverpop-integration "Silverpop integration")
447
 
448
+ = PrintFriendly add-on - included in the Platinum version of the plugin =
449
 
450
+ Send the information collected by the forms to PrintFriendly and attach the resulting PDF files to the notification emails.
451
 
452
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#printfriendly-addon "PrintFriendly add-on")
453
 
454
+ = Mailchimp add-on - included in the Platinum version of the plugin =
455
 
456
+ Add new members to the MailChimp lists with the information collected by the form.
457
 
458
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#mailchimp-addon "MailChimp add-on")
459
 
460
+ = Mautic add-on - included in the Platinum version of the plugin =
461
 
462
+ Add/update contacts in the Mautic service with information collected by the forms.
463
 
464
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#mautic-addon "Mautic add-on")
465
 
466
+ = HubSpot add-on - included in the Platinum version of the plugin =
467
 
468
+ Add/update HubSpot contacts with information collected by the forms.
469
 
470
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#hubspot-addon "HubSpot add-on")
471
 
472
+ = Emma add-on - included in the Platinum version of the plugin =
473
 
474
+ Connect the forms to the Emma service to add new members to Emma groups.
475
 
476
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#emma-addon "Emma add-on")
477
 
478
+ = Twilio add-on - included in the Platinum version of the plugin =
479
 
480
+ Send notification messages (SMS) through Twilio in the form's submissions.
481
 
482
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#twilio-addon "Twilio add-on")
483
 
484
+ = MailPoet add-on - included in the Platinum version of the plugin =
485
 
486
+ Adds subscribers to MailPoet Mailing Lists (MailPoet versions 2 and 3).
487
 
488
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#mailpoet-addon "MailPoet add-on")
489
 
490
  = AffiliateWP add-on - included in the Platinum version of the plugin =
491
 
492
+ Integrate the forms with the "AffiliateWP" plugin.
493
 
494
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#affiliatewp-addon "AffiliateWP add-on")
495
 
496
+ = Authorize.Net add-on - included in the Platinum version of the plugin =
497
 
498
  The Authorize.net Server Integration Method (Authorize.net SIM) is a hosted payment processing solution that handles all of the steps in processing a transaction.
499
 
500
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#authorize-addon "Authorize.Net add-on")
501
 
502
+ = Stripe add-on - included in the Platinum version of the plugin =
503
 
504
  The Stripe Payments add-on (www.stripe.com) provides a way to accept all major cards from customers around the world.
505
 
506
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#stripe-addon "Stripe add-on")
507
 
508
+ = Skrill Payments Integration add-on - included in the Platinum version of the plugin =
509
 
510
+ An interface for accepting payments through secure pages.
511
 
512
  You can accept cards, more than 20 local payment methods, and over 80 direct bank transfer connections with a single integration.
513
 
514
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#skrill-addon "Skrill add-on")
515
 
516
+ = TargetPay (iDeal) add-on - included in the Platinum version of the plugin =
517
 
518
+ Integrate with iDeal, the most popular Dutch payment method. The integration is made via TargetPay: [https://www.targetpay.com/info/ideal?setlang=en](https://www.targetpay.com/info/ideal?setlang=en "TargetPay")
519
 
520
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#targetpay-addon "TargetPay iDeal add-on")
521
 
522
+ = Mollie (iDeal) add-on - included in the Platinum version of the plugin =
523
 
524
+ Integrate with iDeal, the popular Dutch payment method.
525
 
526
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#mollie-addon "Mollie add-on")
527
 
528
+ = RedSys / Servired / Sermepa add-on - included in the Platinum version of the plugin =
529
 
530
+ A secure interface for accepting credit card payments through most banks in Spain (Sabadell, Banco Popular, BBVA, Santander, Bankia-Caixa, Bankinter, etc.)
531
 
532
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#redsys-addon "RedSys / Servired / Sermepa TPV add-on")
533
 
534
  = PayTM add-on - included in the Platinum version of the plugin =
535
 
536
+ A secure interface for accepting payments through credit cards, debit cards, net banking, wallets, and EMI. With over 100 million PayTM users in India, your customers will appreciate the option to pay with their trusted PayTM Wallet.
537
 
538
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#paytm-addon "PayTM add-on")
539
 
540
  = SagePay add-on - included in the Platinum version of the plugin =
541
 
542
+ A secure interface for accepting payments through SagePay.
543
 
544
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#sagepay-addon "SagePay add-on")
545
 
546
  = Sage Payment add-on - included in the Platinum version of the plugin =
547
 
548
+ An interface for accepting payments through a secure SSL-checkout system for both bank cards and virtual check transactions. All authorized and approved transactions will be delivered to your current bank card and/or virtual check batches, viewable within the Virtual Terminal for order processing and settlement.
549
 
550
  [CLICK HERE for additional information](http://cff.dwbooster.com/documentation#sagepayment-addon "Sage Payment add-on")
551
 
559
 
560
  A: [Yes, it is](http://cff.dwbooster.com/faq#q319 "Yes, it is")
561
 
562
+ = Q: What control types are included in the plugin? =
563
 
564
  A: The Calculated Fields Form's page contains detailed information about each field in the plugin: [Click Here](https://cff.dwbooster.com/documentation#common-fields "Click Here")
565
 
589
 
590
  A: [List and description of financial operations](http://cff.dwbooster.com/documentation#financial-module "Financial Operations")
591
 
592
+ = Q: How can I calculate a payment's amortization? =
593
 
594
  A: The CALCULATEAMORTIZATION is the most complex operation in the plugin and deserves its own section. Please, visit the following link to read a detailed description of its use:
595
 
611
 
612
  A: Please, read the answer in the FAQ entry: [Click Here](http://cff.dwbooster.com/faq#q269 "FAQ Entry")
613
 
614
+ = Q: How to use a parameter passed by POST in the equations? =
615
 
616
  A: Please, read the answer in the FAQ entry: [Click Here](http://cff.dwbooster.com/faq#q270 "FAQ Entry")
617
 
627
 
628
  A: [Initializing date/time fields](http://cff.dwbooster.com/faq#q220 "FAQ Entry")
629
 
630
+ = Q: How to change the language on the datepicker? =
631
 
632
  A: There are different alternatives, directly through the form's structure or uploading a new file to the plugin's folder. Please, visit the following link to read the instructions: [Click Here](http://cff.dwbooster.com/faq#q221 "FAQ Entry")
633
 
660
 
661
  A: [How to replace the image displayed in a Media Field?](http://cff.dwbooster.com/faq#q266 "FAQ Entry")
662
 
663
+ = Q: In which order does the plugin evaluate the equations associated with the calculated fields? =
664
 
665
  A: [Evaluating the equations](http://cff.dwbooster.com/faq#q79 "FAQ Entry")
666
 
674
 
675
  A: Please, read the following entry in the plugin's FAQ: [Click Here]](http://cff.dwbooster.com/faq#q225 "utf-8")
676
 
677
+ = Q: The calculated form doesn't appear on the public website. What is the solution? =
678
 
679
  A: Please, change the "Script load method" from "Classic" to "Direct" in the "troubleshoot area" located below the forms list in the settings page of the plugin.
680
 
692
 
693
  A: [Create new validation rules](http://cff.dwbooster.com/documentation#new-validation-rules "New Validation Rules")
694
 
695
+ = Q: How to display a summary of entered data in the form? =
696
 
697
  A: Insert a summary control in the form, and enter the names of the fields to display in the summary through its settings.
698
 
720
 
721
  A: [Hiding the fields in form](http://cff.dwbooster.com/faq#q232 "FAQ Entry")
722
 
723
+ = Q: Why, after assigning some of the column class names (column2, column3, column4, col-...) to a group of fields, the next field is displaced to the right? =
724
 
725
  A: [You can fix this behavior by inserting a separator field between rows](http://cff.dwbooster.com/faq#q320 "FAQ Entry")
726
 
727
+ = Q: How to assign multiple class names to a field? =
728
 
729
  A: The class names are assigned to the fields through the attribute: "Add Css Layout Keywords"
730
 
734
 
735
  A: [Accepted files](http://cff.dwbooster.com/faq#q235 "FAQ Entry")
736
 
737
+ = Q: How can I include the links to the uploaded files in the notification emails? =
738
 
739
  A: [Inserting the links to the uploaded files into the notification emails](http://cff.dwbooster.com/faq#q160 "FAQ Entry")
740
 
741
+ = Q: Why does the form builder display the error message: "The entered data includes invalid characters..."? =
742
 
743
  A: If you are copying the information used to configure the form from third-party applications (like MS Word or Excel), this information can include non-valid characters. The plugin validates the form's structure to avoid this type of errors.
744
 
754
 
755
  A: To disable the dynamic evaluation of the equations in the form, you must untick the checkbox "Eval dynamically the equations associated to the calculated fields" from the "Form Settings" tab of the form builder. After disabling the dynamic evaluation of the equations, you must insert a button field with the "calculate" option as its type. The plugin evaluates the equations by pressing the calculate button.
756
 
757
+ = Q: My company has different departments (like the sales department, the support group, etc.). Can I send a notification email to every department when the form is submitted? =
758
 
759
  A: Yes, that is possible. You must enter the emails' addresses separated by the comma through the "Destination emails" attribute in the form's settings.
760
 
761
+ = Q: Why is the user not receiving the confirmation emails? =
762
 
763
  A: If the users are not receiving the notification emails after the form's submission, there are different possible reasons: [please, read about them here](http://cff.dwbooster.com/faq#q241 "FAQ Entry")
764
 
765
+ = Q: How to insert line breaks in the notification emails when the HTML format is selected? =
766
 
767
  A: If you are using the HTML format in the notification emails, you should insert BR tags for the lines changes in the emails' contents:
768
 
778
 
779
  Please, visit the following link to get the complete list of tags to include in the email: [Accepted tags](https://cff.dwbooster.com/documentation#special-tags "Special tags in the notification emails and the thank you pages")
780
 
781
+ = Q: How to create dependencies between fields in the notification emails and the "Thank You" pages? =
782
 
783
  A: Please, read the answer in the FAQ page of the plugin: [Click Here](http://cff.dwbooster.com/faq#q318 "FAQ Entry")
784
 
812
 
813
  A: Create dependencies with values of multiple fields requires the use of calculated fields. [Read more](https://cff.dwbooster.com/blog/2020/03/01/dependencies/ "Dependencies")
814
 
815
+ = Q: How to prevent users varying the fields' values to pay less than the calculated price? =
816
 
817
  A: The form settings include the attribute "Base amount" to define the minimum price allowed. If a user manipulates the calculated field for paying less, the plugin applies the base amount.
818
 
820
 
821
  A: You can enter the PayPal product's name through the "Paypal product name" attribute in the form's settings. If you enter a field's tag as the product's name, for example, &lt;%fiedname1%&gt; the product's name will be the value submitted by the fieldname1 field.
822
 
823
+ = Q: How to allow to the users to decide the payment frequency for recurring payments? =
824
 
825
  A: Follows the instructions below:
826
 
833
 
834
  If you allow the users to select the payment frequency, you must implement the equation to vary the amount based on the payment frequency.
835
 
836
+ = Q: How to select a choice in a dropdown field, or radio button, based on a calculated value? =
837
 
838
  A: I'll try to describe the process with some hypothetical examples. Assuming the radio button field is fieldname123, and you can select the choice with the value 5, uses the following piece of code as part of the equation associated with the calculated field:
839
 
857
 
858
  A: In this case, the recommendation is to use "RecordSet DS" fields as the data source: [Click Here for instructions](https://cff.dwbooster.com/blog/2019/02/14/ds/ "Recordset DS field")
859
 
860
+ = Q: How to use the data submitted by one form in another one? =
861
 
862
  A: Please, read the instructions in the plugin's documentation.
863
  [Click Here](https://cff.dwbooster.com/documentation#populate-form-b-with-a "Populate the form B with the data submitted by the form A")
875
 
876
  [Customizing the fields in the shopping cart of WooCommerce](http://cff.dwbooster.com/faq#q315 "FAQ Entry")
877
 
878
+ = Q: Why is a WooCommerce product not displaying the "Add to Cart" button? =
879
 
880
  A: You must assign a price to the product through its attribute: "Regular Price" or WooCommerce won't display the "Add to Cart" button.
881
 
893
 
894
  A: There are multiple alternatives, by using the [PDF generator add-on](https://cff.dwbooster.com/blog/2020/07/19/pdf-generator/ "PDF Generator" ), the [PrintFriendly add-on](https://cff.dwbooster.com/blog/2019/09/19/printfriendly/ "PrintFriendly") or the [WebMerge add-on](https://cff.dwbooster.com/blog/2018/10/15/webmerge/ "WebMerge").
895
 
896
+ = Q: How to use an "Upload File" field with multiple selections from Zapier? =
897
 
898
  A: Please, visits the following link to get the answer to your question:
899
  [Click Here](http://cff.dwbooster.com/faq#q274 "FAQ Entry")
903
  A: Please, visits the following link to get the answer to your question:
904
  [Click Here](http://cff.dwbooster.com/faq#q312 "FAQ Entry")
905
 
906
+ = Q: How to protect the form from attacks by spambots? =
907
 
908
  A: Please, follow the instructions described in the plugin's FAQ:
909
  [Click Here](http://cff.dwbooster.com/faq#q313 "FAQ Entry")
941
 
942
  == Changelog ==
943
 
944
+ = 1.1.3 =
945
 
946
+ * Allows selecting the autocomplete attribute from the fields' settings.
947
+ * Includes the Date/Time operations module with the free and professional version of the plugin.
948
+ * Allows passing the version number of the ChartJS library through the CFFCHART operation (Developer and Platinum versions of the plugin).
949
 
950
+ = 1.1.2 =
951
 
952
+ * Includes a new control. The COLOR control.
953
+ * Implements the read-only feature in radio buttons and checkbox fields.
954
 
955
+ = 1.1.1 =
956
 
957
+ * Improve accessibility by making the design more coherent.
 
958
 
959
+ = 1.1.0 =
960
 
961
+ * Modifies the plugin's design and the accessibility.
962
 
963
+ = 1.0.474 =
964
 
965
+ * Includes the getReferrer operation in the URL Operations module.
966
+ * Modifies the cff-gotopage event.
967
+ * Modifies the loading form animation.
968
+ * Modifies the RedSys and Bizum add-ons (Platinum version of the plugin).
969
 
970
+ = 1.0.473 =
971
 
972
+ * Modifies the forms structures.
973
+ * Fixes a CSS conflict.
974
+ * Modifies the RedSys and Bizum add-ons (Platinum version of the plugin).
975
 
976
+ = 1.0.472 =
977
 
978
+ * Allows you to configure the Date/Time fields as read only.
979
+ * Fixes some compatibility issues with the last versions of PHP.
980
+ * Modifies the WooCommerce add-on (Developer and Platinum versions of the plugin).
981
+ * Includes a link from the form's settings to Messages lists (Commercial versions of the plugin).
982
 
983
+ = 1.0.471 =
984
 
985
+ * Fixes a compatibility problem with Internet Explorer, even if this browser has been discontinued by Microsoft.
 
 
 
986
 
987
+ = 1.0.470 =
988
 
989
+ * Modifies the processing and loading animation.
990
+ * Fixes some warnings.
991
+ * Resets the manual entry flag in the calculated fields in the form reset action.
992
 
993
+ = 1.0.469 =
994
 
995
+ * Modifies the summary, field, button, number, and calculated controls.
996
+ * Implements the FORMAT operation to allow formatting the values as part of the equations.
 
 
 
 
 
captcha/captcha.php CHANGED
@@ -24,7 +24,7 @@ if( !class_exists( 'CP_SESSION' ) && session_id() == '' ) session_start();
24
 
25
  if (!isset($_GET["ps"])) $_GET["ps"] = '';
26
 
27
- if( $_GET["hdwtest"] == "sessiontest" )
28
  {
29
  if( !isset( $_GET["autocall"] ) || $_GET["autocall"] != 1 )
30
  {
@@ -52,15 +52,15 @@ if( $_GET["hdwtest"] == "sessiontest" )
52
  exit;
53
  }
54
 
55
- if ($_GET["width"] == '' || !is_numeric($_GET["width"])) $_GET["width"] = "180";
56
- if ($_GET["height"] == '' || !is_numeric($_GET["height"])) $_GET["height"] = "60";
57
- if ($_GET["letter_count"] == ''|| !is_numeric($_GET["letter_count"])) $_GET["letter_count"] = "5";
58
- if ($_GET["min_size"] == ''|| !is_numeric($_GET["min_size"])) $_GET["min_size"] = "35";
59
- if ($_GET["max_size"] == ''|| !is_numeric($_GET["max_size"])) $_GET["max_size"] = "45";
60
- if ($_GET["noise"] == ''|| !is_numeric($_GET["noise"])) $_GET["noise"] = "200";
61
- if ($_GET["noiselength"] == ''|| !is_numeric($_GET["noiselength"])) $_GET["noiselength"] = "5";
62
- if ($_GET["bcolor"] == '') $_GET["bcolor"] = "FFFFFF";
63
- if ($_GET["border"] == '') $_GET["border"] = "000000";
64
 
65
  //configuration
66
  $imgX = ( isset($_GET["width"]) && is_numeric( $_GET["width"] ) )? $_GET["width"] : "180" ;
24
 
25
  if (!isset($_GET["ps"])) $_GET["ps"] = '';
26
 
27
+ if( isset($_GET["hdwtest"]) && $_GET["hdwtest"] == "sessiontest" )
28
  {
29
  if( !isset( $_GET["autocall"] ) || $_GET["autocall"] != 1 )
30
  {
52
  exit;
53
  }
54
 
55
+ if(empty($_GET["width"]) || !is_numeric($_GET["width"])) $_GET["width"] = "180";
56
+ if(empty($_GET["height"]) || !is_numeric($_GET["height"])) $_GET["height"] = "60";
57
+ if(empty($_GET["letter_count"]) || !is_numeric($_GET["letter_count"])) $_GET["letter_count"] = "5";
58
+ if(empty($_GET["min_size"]) || !is_numeric($_GET["min_size"])) $_GET["min_size"] = "35";
59
+ if(empty($_GET["max_size"]) || !is_numeric($_GET["max_size"])) $_GET["max_size"] = "45";
60
+ if(empty($_GET["noise"]) || !is_numeric($_GET["noise"])) $_GET["noise"] = "200";
61
+ if(empty($_GET["noiselength"]) || !is_numeric($_GET["noiselength"])) $_GET["noiselength"] = "5";
62
+ if(empty($_GET["bcolor"])) $_GET["bcolor"] = "FFFFFF";
63
+ if(empty($_GET["border"])) $_GET["border"] = "000000";
64
 
65
  //configuration
66
  $imgX = ( isset($_GET["width"]) && is_numeric( $_GET["width"] ) )? $_GET["width"] : "180" ;
changelog.txt CHANGED
@@ -1,5 +1,85 @@
1
  == Changelog ==
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  = 1.0.463 =
4
 
5
  * Fixes a conflict with the latest update of Divi.
@@ -457,82 +537,4 @@
457
  * Removes unnecessary attributes from the form's settings.
458
  * Modifies some styles.
459
  * Allows identify easier the errors with the notification emails, generating an entry in the Error Logs (Professional, Developer, and Platinum versions of the plugin).
460
- * Modifies the PrintFriendly add-on, allowing configure the emails where attach the pdf files.
461
-
462
- = 1.0.377 =
463
-
464
- * Improves the plugin's performance.
465
- * Removes unnecessary attributes from the form's settings.
466
- * Modifies some styles.
467
- * Allows identify easier the errors with the notification emails, generating an entry in the Error Logs (Professional, Developer, and Platinum versions of the plugin).
468
- * Modifies the PrintFriendly add-on, allowing configure the emails where attach the pdf files.
469
-
470
- = 1.0.376 =
471
-
472
- * Modifies the module that loads the plugin's resources.
473
- * Modifies the module to export the forms. Now the forms list includes the form's id in front of forms' names, and the name of generated file, has the structure: export_id_yyyy-mm-dd_hhiiss.cpfm (Professional, Developer and Platinum versions of the plugin)
474
- * Modifies the Users Permissions add-on to support the new attributes in the submissions shortcode: from, to, limit, order (Developer and Platinum versions of the plugin)
475
- * Includes the DMSTODD operation in the Distance operations module to convert degrees, minutes and seconds values into decimal degrees (Developer and Platinum versions of the plugin).
476
- * Modifies the SagePay add-on (Platinum version of the plugin)
477
-
478
- = 1.0.375 =
479
-
480
- * Includes additional validations rules to identify possible conflicts with other optimization plugins.
481
- * Fixes an encoding issue with some ampersand symbols in generated URLs.
482
-
483
- = 1.0.374 =
484
-
485
- * It makes easier debugging the errors in the equations.
486
- * Includes the new CSS class hide-strong, it applies the display:none with the !important modifier.
487
- * Includes two new operations in the Managing Fields module, ACTIVATEFIELD and IGNOREFIELD for activating and ignoring the fields programmatically.
488
- * Reduces the space between fields after the forms' submissions.
489
-
490
- = 1.0.373 =
491
-
492
- * Includes additional validations rules to identify possible conflicts with other optimization plugins.
493
-
494
- = 1.0.372 =
495
-
496
- * Includes additional validations rules to identify possible conflicts with other optimization plugins.
497
- * Includes the role attribute in the [CP_CALCULATED_FIELDS_RESULT_LIST] shortcode to display the submissions list for specific users roles.
498
-
499
- = 1.0.371 =
500
-
501
- * This update modifies the plugin's code to prevent poorly implemented optimization plugins affect the forms. Some optimization plugins do not distinguish between a javascript comment and a regular expression, breaking the plugins code in the optimization process.
502
-
503
- = 1.0.370 =
504
-
505
- * Includes two new operations: SUM and CONCATENATE. In javascript the plus operator is overloaded, it is used to sum numbers and concatenate texts, these operations solve the ambiguity.
506
- * Includes a new section in the settings page of the plugin to identify possible causes of conflicts with third party plugins.
507
-
508
- = 1.0.369 =
509
-
510
- * Fixes a compatibility issue with the new version of Gutenberg editor.
511
-
512
- = 1.0.368 =
513
-
514
- * Includes the generateURL operation in the URL Operations Module to generate a valid URL, given a base URL, a plain object for parameters, and hash.
515
- * Fixes the documentation of operations modules.
516
- * Fixes an issue in the advanced equations editor that was ignoring some operations modules.
517
-
518
- = 1.0.367 =
519
-
520
- * Includes two new operations in the URL Operations Module: getURLHash and getURLPath
521
- * Includes a new attribute in the troubleshoot area to fix the wrong encoding of notification emails (Professional, Developer and Platinum versions of the plugin).
522
-
523
- = 1.0.366 =
524
-
525
- * Some few changes in the interface.
526
- * Allows to use the raw values of fields for filtering in the datasource fields: <%fieldname1|r%> (Developer and Platinum versions of the plugin).
527
-
528
- = 1.0.365 =
529
-
530
- * Includes new options into the settings page of the plugin for controlling the direct access to the forms and their APM versions.
531
-
532
- = 1.0.364 =
533
-
534
- * Implements the new operation LCM: least common multiple between two numbers.
535
-
536
- = 1.0.363 =
537
-
538
- * Modifies the next/previous page behavior, in multi-pages forms, for jumping pages without active fields.
1
  == Changelog ==
2
 
3
+ = 1.1.3 =
4
+
5
+ * Allows selecting the autocomplete attribute from the fields' settings.
6
+ * Includes the Date/Time operations module with the free and professional version of the plugin.
7
+ * Allows passing the version number of the ChartJS library through the CFFCHART operation (Developer and Platinum versions of the plugin).
8
+
9
+ = 1.1.2 =
10
+
11
+ * Includes a new control. The COLOR control.
12
+ * Implements the read-only feature in radio buttons and checkbox fields.
13
+
14
+ = 1.1.1 =
15
+
16
+ * Improve accessibility by making the design more coherent.
17
+
18
+ = 1.1.0 =
19
+
20
+ * Modifies the plugin's design and the accessibility.
21
+
22
+ = 1.0.474 =
23
+
24
+ * Includes the getReferrer operation in the URL Operations module.
25
+ * Modifies the cff-gotopage event.
26
+ * Modifies the loading form animation.
27
+ * Modifies the RedSys and Bizum add-ons (Platinum version of the plugin).
28
+
29
+ = 1.0.473 =
30
+
31
+ * Modifies the forms structures.
32
+ * Fixes a CSS conflict.
33
+ * Modifies the RedSys and Bizum add-ons (Platinum version of the plugin).
34
+
35
+ = 1.0.472 =
36
+
37
+ * Allows you to configure the Date/Time fields as read only.
38
+ * Fixes some compatibility issues with the last versions of PHP.
39
+ * Modifies the WooCommerce add-on (Developer and Platinum versions of the plugin).
40
+ * Includes a link from the form's settings to Messages lists (Commercial versions of the plugin).
41
+
42
+ = 1.0.471 =
43
+
44
+ * Fixes a compatibility problem with Internet Explorer, even if this browser has been discontinued by Microsoft.
45
+
46
+ = 1.0.470 =
47
+
48
+ * Modifies the processing and loading animation.
49
+ * Fixes some warnings.
50
+ * Resets the manual entry flag in the calculated fields in the form reset action.
51
+
52
+ = 1.0.469 =
53
+
54
+ * Modifies the summary, field, button, number, and calculated controls.
55
+ * Implements the FORMAT operation to allow formatting the values as part of the equations.
56
+
57
+ = 1.0.468 =
58
+
59
+ * Fixes a conflict with some themes.
60
+ * Fixes compatibility issues with PHP 8.
61
+ * Improves the signature and PDF Generator add-ons (Platinum version of the plugin).
62
+
63
+ = 1.0.467 =
64
+
65
+ * Modifies the calculated fields to exclude the prefix and suffix if the currency checkbox is ticked and the equation's result is not a number.
66
+ * Allows accessing the forms builder directly from the Beaver Builder module.
67
+
68
+ = 1.0.466 =
69
+
70
+ * Allows to access the forms builder directly from the widget and SiteOrigin.
71
+
72
+ = 1.0.465 =
73
+
74
+ * Fixes a conflict with some themes.
75
+ * Prevents an issue caused by some optimizers.
76
+
77
+ = 1.0.464 =
78
+
79
+ * Modifies some styles.
80
+ * Modifies the IGNOREFIELD and ACTIVEFIELD operations accepting the form's id as its second parameter.
81
+ * Includes additional buttons in the Gutenberg and Elementor editors to access the forms builder directly.
82
+
83
  = 1.0.463 =
84
 
85
  * Fixes a conflict with the latest update of Divi.
537
  * Removes unnecessary attributes from the form's settings.
538
  * Modifies some styles.
539
  * Allows identify easier the errors with the notification emails, generating an entry in the Error Logs (Professional, Developer, and Platinum versions of the plugin).
540
+ * Modifies the PrintFriendly add-on, allowing configure the emails where attach the pdf files.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cp_calculatedfieldsf_free.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Calculated Fields Form
4
  Plugin URI: https://cff.dwbooster.com
5
  Description: Create forms with field values calculated based in other form field values.
6
- Version: 1.0.463
7
  Text Domain: calculated-fields-form
8
  Author: CodePeople
9
  Author URI: https://cff.dwbooster.com
@@ -16,7 +16,7 @@ if(!defined('WP_DEBUG') || true != WP_DEBUG)
16
  }
17
 
18
  // Defining main constants
19
- define('CP_CALCULATEDFIELDSF_VERSION', '1.0.463' );
20
  define('CP_CALCULATEDFIELDSF_MAIN_FILE_PATH', __FILE__ );
21
  define('CP_CALCULATEDFIELDSF_BASE_PATH', dirname( CP_CALCULATEDFIELDSF_MAIN_FILE_PATH ) );
22
  define('CP_CALCULATEDFIELDSF_BASE_NAME', plugin_basename( CP_CALCULATEDFIELDSF_MAIN_FILE_PATH ) );
3
  Plugin Name: Calculated Fields Form
4
  Plugin URI: https://cff.dwbooster.com
5
  Description: Create forms with field values calculated based in other form field values.
6
+ Version: 1.1.3
7
  Text Domain: calculated-fields-form
8
  Author: CodePeople
9
  Author URI: https://cff.dwbooster.com
16
  }
17
 
18
  // Defining main constants
19
+ define('CP_CALCULATEDFIELDSF_VERSION', '1.1.3' );
20
  define('CP_CALCULATEDFIELDSF_MAIN_FILE_PATH', __FILE__ );
21
  define('CP_CALCULATEDFIELDSF_BASE_PATH', dirname( CP_CALCULATEDFIELDSF_MAIN_FILE_PATH ) );
22
  define('CP_CALCULATEDFIELDSF_BASE_NAME', plugin_basename( CP_CALCULATEDFIELDSF_MAIN_FILE_PATH ) );
css/loader.css ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ /* PROCESSION FORM ANIMATION */
2
+ @keyframes cffspinner {to {transform: rotate(360deg);}}
3
+ #fbuilder .cff-processing-form{position:fixed;top:calc( 50% - 50px );left:calc( 50% - 50px );width:100px;height:100px;z-index:99999;}
4
+ #fbuilder .cff-processing-form:before {
5
+ content:'';box-sizing:border-box;position:absolute;width:100px;height:100px;
6
+ border-radius:50%;border-top:6px solid #333;
7
+ border-right:4px solid transparent;
8
+ animation:cffspinner .6s linear infinite;
9
+ }
css/spinner.gif DELETED
Binary file
css/style.css CHANGED
@@ -3,11 +3,12 @@
3
  .clearer{clear:both;}
4
  .column{float:left;}
5
  .columnr{float:right;}
6
- .ctrlsColumn{width:380px;z-index:9999;}
7
  .ctrlsColumn.expanded{min-width:380px;width:75%;position:absolute;}
8
  .ctrlsColumn .expand-shrink{float:right;margin:8px 5px 0px 0px;cursor:pointer;}
9
  .dashboardColumn{ width:calc(100% - 400px); }
10
  .width100{width:100%}
 
11
  .width50{width:50%}
12
  .width20{width:24%}
13
  .width40{width:40%}
@@ -16,10 +17,9 @@
16
  .button, .form-builder .button{float:left;margin:5px 15px;}
17
  .button.n span{color:#AED0EA}
18
  .cff-active-column{border:1px solid #0073aa; padding:5px;display:inline-block;}
19
- #tabs{height:650px;width:100%;overflow-y:auto;}
20
  #fbuilder{height:640px;overflow:auto;position:relative;}
21
  #fbuilder .fields{border:1px solid transparent;padding:3px 10px 14px 10px;margin:5px 0px;display:block;position:relative;}
22
- #fbuilder .fields:before {content: attr(title); background-color:#FFF1A0;-webkit-box-shadow: inset 0px 0px 0px 1px rgba(0,0,0,0.3);box-shadow: inset 0px 0px 0px 1px rgba(0,0,0,0.3); text-shadow: 1px 1px 0px rgba(255, 255, 255, .4); padding:3px 5px; margin:0 5px 5px 0; display:table;}
23
  #fbuilder .ftext:before{background-color:rgba(212,187,221,0.7);}
24
  #fbuilder .fcurrency:before{background-color:rgba(253,209,210,0.7);}
25
  #fbuilder .fnumber:before{background-color:rgba(251,237,224,0.7);}
@@ -56,8 +56,20 @@
56
  #fbuilder .fields .copy{right:20px;}
57
 
58
  #fbuilder legend{ border:1px solid rgba(222,222,222,.75); background:#FFF; margin-left:5px; padding: 0 5px; }
59
- #fbuilder .fcontainer{ border:1px solid rgba(222,222,222,.75);min-height:67px;padding:10px 5px;}
60
  #fbuilder .fieldscontainer{min-height:67px;}
 
 
 
 
 
 
 
 
 
 
 
 
61
  #fbuilder .fhtml {border:1px dashed rgba(222,222,222,.75);min-height:16px;}
62
 
63
  .groupBox,
@@ -73,7 +85,7 @@
73
  .addComplexRule{cursor:pointer;}
74
  .cf_dependence_rule{width:calc( 100% - 100px );width:-webkit-calc( 100% - 100px );width:-moz-calc( 100% - 100px );width:-o-calc( 100% - 100px );}
75
 
76
- .choice-ctrls{float:right;/* margin-top:5px; */}
77
  .choice-ctrls *{float:left;cursor:pointer;}
78
 
79
  .calc_dependent{width:150px;}
@@ -94,7 +106,7 @@
94
  a.helpfbuilder.dep{font-size:100%;padding-left:10px}
95
  input [disabled] {background-color: #f00;}
96
  input [readonly] {background-color: #f00;}
97
- #fbuilder .fields.ui-selected{background-color:#DFEFFF;border:1px solid #C2D7EF}
98
  #fbuilder .fields.ui-selected .arrow,#fbuilder .fields.ui-selected>.remove,#fbuilder .fields.ui-selected>.copy,#fbuilder .fields.ui-selected>.collapse,#fbuilder .fields.ui-selected.collapsed>.uncollapse{display:inline}
99
  #fbuilder .fields.collapsed>.dfield>.fcontainer{border-color: rgba(255,201,38,.75);}
100
  #fbuilder .collapsed-label{padding:10px;}
@@ -133,26 +145,44 @@ textarea {resize: none}
133
  #fbuilder span.uh{display:block;font-size:80%;clear:both}
134
  #fbuilder .section_break{border-top:1px dotted #555;clear:both}
135
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  #fbuilder .uh_phone{float:left;margin:0px 5px;font-size:80%;text-align:center;position: relative;}
137
  #fbuilder .uh_phone input{text-align:center;font-size:100%;}
138
  #fbuilder .uh_phone div.cpefb_error{display:block;white-space:nowrap;width:400px}
139
 
 
 
 
140
  .eq_btn{min-width:45px;}
141
  .form-builder #sFieldList,
142
  .form-builder #sToolbarList{width: calc( 100% - 50px );width: -webkit-calc( 100% - 50px );width: -moz-calc( 100% - 50px );width: -o-calc( 100% - 50x );}
143
  #sAdvancedEditor,
144
  #fCalculated{
145
- background: url(ui-bg_glass_80_eebd4d_1x400.png) repeat-x scroll 50% 50% #EEBD4D;
146
  border: 1px solid #D0771D;
147
  color: #643F0D;
148
  }
149
  #sAdvancedEditor{text-align:center; text-transform: uppercase; padding:5px;margin-bottom:10px;cursor:pointer;font-weight:bold;}
150
  #facceptance{
151
- background: url(ui-bg_glass_80_eebd4dc_1x400.png) repeat-x scroll 50% 50% #619218;
152
  border: 1px solid #619218;
153
  color: #25530F;
154
  }
155
  #facceptance span{padding-left: 0; padding-right:0;}
 
156
 
157
  a.helpfbuilder{font-size:80%;text-decoration:underline;color:#00f;cursor:pointer;}
158
  .working_dates input[type='checkbox']{width:8%}
@@ -176,7 +206,9 @@ a.helpfbuilder{font-size:80%;text-decoration:underline;color:#00f;cursor:pointer
176
 
177
  .cff-events-list th{white-space:nowrap;}
178
 
 
179
  @media only screen and (max-width: 640px){
 
180
  .cff-custom-table,
181
  .cff-custom-table thead,
182
  .cff-custom-table tbody,
@@ -200,17 +232,18 @@ a.helpfbuilder{font-size:80%;text-decoration:underline;color:#00f;cursor:pointer
200
  .cff_form_builder .postbox input[type=text],
201
  .cff_form_builder .postbox input[type=number],
202
  .cff_form_builder .postbox input[type=password]{display:block;width:100% !important;margin-bottom:5px;}
 
 
203
  .cff_form_builder .postbox table,
204
  .cff_form_builder .postbox table tr,
205
  .cff_form_builder .postbox table th,
206
- .cff_form_builder .postbox table td{display:block;width:100% !important;}
207
  .cff_form_builder nobr{white-space:normal !important;}
208
  .form-builder{min-width: auto;background:#FFF !important;}
209
- .form-builder #tabs{width:auto;}
210
  .form-builder .expand-shrink{display:none;}
211
  .dashboardColumn,
212
  .ctrlsColumn{width:100% !important;position:relative !important;}
213
- .form-builder .button{margin:0; padding:0;width:50%;}
214
  #fbuilder{margin-top:10px;padding:0;}
215
  .cff-form-name-shortcode{display:none;}
216
  .cff-revisions-container{float:none; width:100%;padding:10px 5%;}
@@ -219,22 +252,17 @@ a.helpfbuilder{font-size:80%;text-decoration:underline;color:#00f;cursor:pointer
219
  .form-builder #tabs-3 div{margin-bottom:10px;}
220
  .form-builder #tabs-3 .groupBox label{display:block;margin-bottom:5px;}
221
  table.form-table tbody{display:block;width:100% !important;}
 
 
222
  }
223
  @media only screen and (max-width: 480px){
224
  .cff-custom-table input[type="button"]{margin:0 !important; width:100% !important;display:block !important;}
225
  }
226
 
227
- #metabox_basic_settings0,
228
- #metabox_basic_settings1,
229
- #metabox_basic_settings2,
230
- #metabox_basic_settings3,
231
- #metabox_basic_settings4{cursor:pointer !important;}
232
 
233
- #metabox_basic_settings0 * ,
234
- #metabox_basic_settings1 * ,
235
- #metabox_basic_settings2 * ,
236
- #metabox_basic_settings3 * ,
237
- #metabox_basic_settings4 * {color:#bfbdbd91 !important;pointer-events: none !important;}
238
  .cff-addons-category{display:inline-block;font-weight:bold;text-transform:capitalize;border-bottom:1px solid #eee;margin-bottom:10px;padding-bottom:5px;}
239
  .cff-addons-category:not(:first-child){margin-top:20px;}
240
 
3
  .clearer{clear:both;}
4
  .column{float:left;}
5
  .columnr{float:right;}
6
+ .ctrlsColumn{width:380px;z-index:99999;}
7
  .ctrlsColumn.expanded{min-width:380px;width:75%;position:absolute;}
8
  .ctrlsColumn .expand-shrink{float:right;margin:8px 5px 0px 0px;cursor:pointer;}
9
  .dashboardColumn{ width:calc(100% - 400px); }
10
  .width100{width:100%}
11
+ .width75{width:75%}
12
  .width50{width:50%}
13
  .width20{width:24%}
14
  .width40{width:40%}
17
  .button, .form-builder .button{float:left;margin:5px 15px;}
18
  .button.n span{color:#AED0EA}
19
  .cff-active-column{border:1px solid #0073aa; padding:5px;display:inline-block;}
 
20
  #fbuilder{height:640px;overflow:auto;position:relative;}
21
  #fbuilder .fields{border:1px solid transparent;padding:3px 10px 14px 10px;margin:5px 0px;display:block;position:relative;}
22
+ #fbuilder .fields:before {content: attr(title); background-color:#FFF1A0;text-shadow: 1px 1px 0px rgba(255, 255, 255, .4); padding:3px 5px; margin:0 5px 5px 0; display:table;border: 1px solid rgba(0,0,0,.2);}
23
  #fbuilder .ftext:before{background-color:rgba(212,187,221,0.7);}
24
  #fbuilder .fcurrency:before{background-color:rgba(253,209,210,0.7);}
25
  #fbuilder .fnumber:before{background-color:rgba(251,237,224,0.7);}
56
  #fbuilder .fields .copy{right:20px;}
57
 
58
  #fbuilder legend{ border:1px solid rgba(222,222,222,.75); background:#FFF; margin-left:5px; padding: 0 5px; }
59
+ #fbuilder .fcontainer{ border:1px solid rgba(222,222,222,.75);min-height:67px;padding:10px 5px;position:relative;}
60
  #fbuilder .fieldscontainer{min-height:67px;}
61
+
62
+ .cff-goto-top{text-align:right;}
63
+ .cff-goto-top a::after{display:inline-block; content: " ↑"}
64
+
65
+ /* COLUMNS STICKERS */
66
+ #fbuilder .sticker{display:inline-block;position:absolute;right:5px;top:5px;}
67
+ #fbuilder fieldset.fcontainer>.sticker{top:-5px;}
68
+ #fbuilder .sticker i{display:inline-block;height:15px;background:#DAEDFA;border:1px solid #aed0ea;margin-left:2px;}
69
+ #fbuilder .sticker i.sticker-1{display:none;}
70
+ #fbuilder .sticker i.sticker-2{width:32px;}
71
+ #fbuilder .sticker i.sticker-3{width:21px;}
72
+ #fbuilder .sticker i.sticker-4{width:15px;}
73
  #fbuilder .fhtml {border:1px dashed rgba(222,222,222,.75);min-height:16px;}
74
 
75
  .groupBox,
85
  .addComplexRule{cursor:pointer;}
86
  .cf_dependence_rule{width:calc( 100% - 100px );width:-webkit-calc( 100% - 100px );width:-moz-calc( 100% - 100px );width:-o-calc( 100% - 100px );}
87
 
88
+ .choice-ctrls{position:absolute;top:3px;right:-3px;}
89
  .choice-ctrls *{float:left;cursor:pointer;}
90
 
91
  .calc_dependent{width:150px;}
106
  a.helpfbuilder.dep{font-size:100%;padding-left:10px}
107
  input [disabled] {background-color: #f00;}
108
  input [readonly] {background-color: #f00;}
109
+ #fbuilder .fields.ui-selected{background-color:#dfeffd7a;border:1px solid #C2D7EF}
110
  #fbuilder .fields.ui-selected .arrow,#fbuilder .fields.ui-selected>.remove,#fbuilder .fields.ui-selected>.copy,#fbuilder .fields.ui-selected>.collapse,#fbuilder .fields.ui-selected.collapsed>.uncollapse{display:inline}
111
  #fbuilder .fields.collapsed>.dfield>.fcontainer{border-color: rgba(255,201,38,.75);}
112
  #fbuilder .collapsed-label{padding:10px;}
145
  #fbuilder span.uh{display:block;font-size:80%;clear:both}
146
  #fbuilder .section_break{border-top:1px dotted #555;clear:both}
147
 
148
+ /* TABS */
149
+ .form-builder #tabs{height:650px;width:100%;overflow:hidden;}
150
+ .form-builder #tabs-1,
151
+ .form-builder #tabs-2,
152
+ .form-builder #tabs-3{top:35px;bottom:0;left:0;right:0;position:absolute;overflow-y:auto;}
153
+ .form-builder #tabs .ui-tabs-anchor{padding-left:8px; padding-right:8px;}
154
+ .form-builder #tabs,
155
+ .form-builder #tabs .ui-tabs-nav,
156
+ .form-builder #tabs .ui-tabs-nav .ui-tabs-tab{border-radius:0;}
157
+ .form-builder #tabs .ui-tabs-nav{border-top:0;border-left:0;border-right:0;background:transparent !important;border-color:#ddd}
158
+ .form-builder .ctrlsColumn .ui-tabs .ui-tabs-nav .ui-tabs-tab{background:#DAEDFA;width:30%;box-sizing:border-box;}
159
+ .form-builder .ctrlsColumn .ui-tabs .ui-tabs-nav .ui-tabs-tab.ui-tabs-active{background:#62BBE9}
160
+ .form-builder .ctrlsColumn .ui-tabs .ui-tabs-nav .ui-tabs-tab a{text-overflow: ellipsis;white-space: nowrap;overflow: hidden;width:100%;box-sizing:border-box;text-align:center;}
161
+
162
  #fbuilder .uh_phone{float:left;margin:0px 5px;font-size:80%;text-align:center;position: relative;}
163
  #fbuilder .uh_phone input{text-align:center;font-size:100%;}
164
  #fbuilder .uh_phone div.cpefb_error{display:block;white-space:nowrap;width:400px}
165
 
166
+ .form-builder #sFieldList_chosen .chosen-single{min-height:30px;}
167
+ .form-builder #sFieldList_chosen .chosen-single span{line-height:30px;}
168
+
169
  .eq_btn{min-width:45px;}
170
  .form-builder #sFieldList,
171
  .form-builder #sToolbarList{width: calc( 100% - 50px );width: -webkit-calc( 100% - 50px );width: -moz-calc( 100% - 50px );width: -o-calc( 100% - 50x );}
172
  #sAdvancedEditor,
173
  #fCalculated{
174
+ background: #F9E774;
175
  border: 1px solid #D0771D;
176
  color: #643F0D;
177
  }
178
  #sAdvancedEditor{text-align:center; text-transform: uppercase; padding:5px;margin-bottom:10px;cursor:pointer;font-weight:bold;}
179
  #facceptance{
180
+ background: #B5E66D;
181
  border: 1px solid #619218;
182
  color: #25530F;
183
  }
184
  #facceptance span{padding-left: 0; padding-right:0;}
185
+ #metabox_captcha_settings td{vertical-align:top;}
186
 
187
  a.helpfbuilder{font-size:80%;text-decoration:underline;color:#00f;cursor:pointer;}
188
  .working_dates input[type='checkbox']{width:8%}
206
 
207
  .cff-events-list th{white-space:nowrap;}
208
 
209
+ .cff-addon-item{padding-right:10px;padding-bottom:5px;box-sizing:border-box;width:50%;float:left;}
210
  @media only screen and (max-width: 640px){
211
+ .cff-addon-item{padding-right:0;padding-bottom:20px;width:100%;float:none;}
212
  .cff-custom-table,
213
  .cff-custom-table thead,
214
  .cff-custom-table tbody,
232
  .cff_form_builder .postbox input[type=text],
233
  .cff_form_builder .postbox input[type=number],
234
  .cff_form_builder .postbox input[type=password]{display:block;width:100% !important;margin-bottom:5px;}
235
+ .cff_form_builder .postbox input[type=checkbox],
236
+ .cff_form_builder .postbox input[type=radio]{margin:0;}
237
  .cff_form_builder .postbox table,
238
  .cff_form_builder .postbox table tr,
239
  .cff_form_builder .postbox table th,
240
+ .cff_form_builder .postbox table td{display:block;width:100% !important;box-sizing:border-box;}
241
  .cff_form_builder nobr{white-space:normal !important;}
242
  .form-builder{min-width: auto;background:#FFF !important;}
 
243
  .form-builder .expand-shrink{display:none;}
244
  .dashboardColumn,
245
  .ctrlsColumn{width:100% !important;position:relative !important;}
246
+ .form-builder .button{margin:0; padding:0;width:49%;margin-right:1%;margin-top:5px;}
247
  #fbuilder{margin-top:10px;padding:0;}
248
  .cff-form-name-shortcode{display:none;}
249
  .cff-revisions-container{float:none; width:100%;padding:10px 5%;}
252
  .form-builder #tabs-3 div{margin-bottom:10px;}
253
  .form-builder #tabs-3 .groupBox label{display:block;margin-bottom:5px;}
254
  table.form-table tbody{display:block;width:100% !important;}
255
+
256
+ .choice-ctrls{top:0px;}
257
  }
258
  @media only screen and (max-width: 480px){
259
  .cff-custom-table input[type="button"]{margin:0 !important; width:100% !important;display:block !important;}
260
  }
261
 
262
+ .metabox_disabled_section{cursor:pointer !important;}
263
+ .metabox_disabled_section * {color:#bfbdbd91 !important;pointer-events: none !important;}
264
+ .metabox_disabled_section #captchaimg{opacity:0.3;}
 
 
265
 
 
 
 
 
 
266
  .cff-addons-category{display:inline-block;font-weight:bold;text-transform:capitalize;border-bottom:1px solid #eee;margin-bottom:10px;padding-bottom:5px;}
267
  .cff-addons-category:not(:first-child){margin-top:20px;}
268
 
css/stylepublic.css CHANGED
@@ -396,7 +396,7 @@
396
  #fbuilder .pbreak.pb0 .pbPrevious,
397
  #fbuilder .pbreak.pbEnd .pbNext{display:none !important;}
398
  #fbuilder .ignore{display:none;}
399
- #fbuilder fieldset{border:1px solid #ccc;padding:10px;}
400
  #fbuilder legend{border:1px solid #ccc;padding:5px 10px;}
401
  #fbuilder .cff-collapsible.cff-collapsed>fieldset>div{display:none;}
402
  #fbuilder .cff-collapsible.cff-collapsed>fieldset::after{content:'...';}
@@ -409,7 +409,7 @@
409
  #fbuilder input[type='checkbox']{width:auto;height:auto;}
410
  #fbuilder input[type='radio']:after,
411
  #fbuilder input[type='checkbox']:after{display:none;}
412
- .ui-tooltip.uh-tooltip{width:250px;font-size:10px;font-weight:normal;padding:5px;z-index:9999 !important;box-shadow:none;}
413
  .ui-tooltip img{max-width:100%;}
414
  #fbuilder input[type="checkbox"]{-webkit-appearance:checkbox!important;}
415
  #fbuilder input[type="radio"]{-webkit-appearance:radio!important;}
@@ -453,7 +453,17 @@
453
  }
454
  #fbuilder .cff-dialog{position:fixed;z-index:999999;padding:30px;width:600px;height:300px;background:#fff;top:50%;left:50%;box-shadow:rgba(0, 0, 0, 0.5) 0px 0px 10px 0px;}
455
  #fbuilder .cff-dialog-content{width:100%;height:100%;overflow:auto;white-space:normal;}
456
- #fbuilder .cff-processing-form{position:fixed; top:calc( 50% - 50px ); left:calc( 50% - 50px ); width:100px; height:100px; background-image:url("spinner.gif");background-size:cover;z-index:99999;}
 
 
 
 
 
 
 
 
 
 
457
  #fbuilder #loginform label{min-width:250px;display:inline-block;}
458
 
459
  /* ZOOM IPHONE */
396
  #fbuilder .pbreak.pb0 .pbPrevious,
397
  #fbuilder .pbreak.pbEnd .pbNext{display:none !important;}
398
  #fbuilder .ignore{display:none;}
399
+ #fbuilder fieldset{border:1px solid #ccc;padding:10px;display:block;}
400
  #fbuilder legend{border:1px solid #ccc;padding:5px 10px;}
401
  #fbuilder .cff-collapsible.cff-collapsed>fieldset>div{display:none;}
402
  #fbuilder .cff-collapsible.cff-collapsed>fieldset::after{content:'...';}
409
  #fbuilder input[type='checkbox']{width:auto;height:auto;}
410
  #fbuilder input[type='radio']:after,
411
  #fbuilder input[type='checkbox']:after{display:none;}
412
+ .ui-tooltip.uh-tooltip{width:250px;font-size:10px;font-weight:normal;padding:5px;z-index:9999 !important;box-shadow:none;background:white;opacity:1;}
413
  .ui-tooltip img{max-width:100%;}
414
  #fbuilder input[type="checkbox"]{-webkit-appearance:checkbox!important;}
415
  #fbuilder input[type="radio"]{-webkit-appearance:radio!important;}
453
  }
454
  #fbuilder .cff-dialog{position:fixed;z-index:999999;padding:30px;width:600px;height:300px;background:#fff;top:50%;left:50%;box-shadow:rgba(0, 0, 0, 0.5) 0px 0px 10px 0px;}
455
  #fbuilder .cff-dialog-content{width:100%;height:100%;overflow:auto;white-space:normal;}
456
+
457
+ /* PROCESSION FORM ANIMATION */
458
+ @keyframes cffspinner {to {transform: rotate(360deg);}}
459
+ #fbuilder .cff-processing-form{position:fixed;top:calc( 50% - 50px );left:calc( 50% - 50px );width:100px;height:100px;z-index:99999;}
460
+ #fbuilder .cff-processing-form:before {
461
+ content:'';box-sizing:border-box;position:absolute;width:100px;height:100px;
462
+ border-radius:50%;border-top:6px solid #333;
463
+ border-right:4px solid transparent;
464
+ animation:cffspinner .6s linear infinite;
465
+ }
466
+
467
  #fbuilder #loginform label{min-width:250px;display:inline-block;}
468
 
469
  /* ZOOM IPHONE */
css/ui-bg_glass_80_eebd4d_1x400.png DELETED
Binary file
css/ui-bg_glass_80_eebd4dc_1x400.png DELETED
Binary file
inc/cpcff_admin_int.inc.php CHANGED
@@ -57,10 +57,10 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
57
  print '<br><span style="font-size:14px;font-style:italic;">'.__('Direct form URL', 'calculated-fields-form').': <a href="'.esc_attr($url).'" target="_blank">'.$url.'</a></span>';
58
  }
59
  ?></h1>
60
- <input type="button" name="backbtn" value="<?php esc_attr_e( 'Back to items list...', 'calculated-fields-form' ); ?>" onclick="document.location='admin.php?page=cp_calculated_fields_form';">
61
  <br /><br />
62
 
63
- <form method="post" action="" name="cpformconf" class="cff_form_builder">
64
  <input type="hidden" name="_cpcff_nonce" value="<?php echo wp_create_nonce( 'cff-form-settings' ); ?>" />
65
  <input name="cp_calculatedfieldsf_post_options" type="hidden" value="1" />
66
  <input name="cp_calculatedfieldsf_id" type="hidden" value="<?php echo CP_CALCULATEDFIELDSF_ID; ?>" />
@@ -70,7 +70,7 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
70
  <h2><?php _e( 'Form Settings', 'calculated-fields-form' ); ?>:</h2>
71
  <hr />
72
  <div><?php _e( '* Different form styles available on the tab Form Settings &gt;&gt; Form Template', 'calculated-fields-form' ); ?></div>
73
- <div id="metabox_basic_settings" class="postbox" >
74
  <div class="hndle">
75
  <h3 style="padding:5px;display:inline-block;"><span><?php _e( 'Form Builder', 'calculated-fields-form' ); ?></span></h3>
76
  <div class="cff-revisions-container">
@@ -99,7 +99,7 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
99
  echo $cff_structure_error;
100
  }
101
  ?></div>
102
- <p style="border:1px solid #F0AD4E;background:#FBE6CA;padding:10px;"><span style="font-weight:bold;"><?php _e('If the form is not loading in the public website, go to the settings page of the plugin through the menu option: "Settings/Calculated Fields Form", select the "Classic" option for the attribute: "Script load method", and press the "Update" button.','calculated-fields-form'); ?></span><br /><?php _e( 'If you need also the form to be sent to the server side for processing (for example to deliver emails) then the <a href="https://cff.dwbooster.com/" target="_blank">Professional or Developer versions</a> of the plugin will be required.', 'calculated-fields-form' ); ?></p>
103
  <input type="hidden" name="form_structure" id="form_structure" value="<?php print esc_attr(preg_replace('/&quot;/i', '&amp;quot;', json_encode($form_obj->get_option( 'form_structure', CP_CALCULATEDFIELDSF_DEFAULT_form_structure )))); ?>" />
104
  <input type="hidden" name="templates" id="templates" value="<?php print esc_attr( json_encode( CPCFF_TEMPLATES::load_templates() ) ); ?>" />
105
  <link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/themes/cupertino/jquery-ui.min.css" type="text/css" rel="stylesheet" property="stylesheet" />
@@ -118,7 +118,7 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
118
  result = window.confirm('<?php print esc_js(__('The action will load the revision selected, the data are not stored will be lose. Do you want continue?', 'calculated-fields-form'));?>');
119
  if(result)
120
  {
121
- $calculatedfieldsfQuery('<form method="post" action="" name="cpformconf" class="cff_form_builder"><input type="hidden" name="_cpcff_nonce" value="<?php echo wp_create_nonce( 'cff-form-settings' ); ?>" /><input name="cp_calculatedfieldsf_id" type="hidden" value="<?php echo CP_CALCULATEDFIELDSF_ID; ?>" /><input type="hidden" name="cpcff_revision_to_apply" value="'+revision+'"></form>').appendTo('body').submit();
122
  }
123
  }
124
  }
@@ -150,7 +150,7 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
150
  f.fBuild.addItem($calculatedfieldsfQuery(this).attr("id"));
151
  });
152
 
153
- jQuery("#metabox_basic_settings0,#metabox_basic_settings1,#metabox_basic_settings2,#metabox_basic_settings3,#metabox_basic_settings4")
154
  .click( function(){
155
  if(confirm("<?php _e( 'These features aren\'t available in this version. Do you want to open the plugin\'s page to check other versions?', 'calculated-fields-form' ); ?>"))
156
  document.location = 'https://cff.dwbooster.com/';
@@ -212,18 +212,26 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
212
  <input type="button" name="previewbtn" id="previewbtn" class="button-primary" value="<?php esc_attr_e( 'Preview', 'calculated-fields-form' ); ?>" onclick="jQuery.fbuilder.preview( this );" title="Saves the form's structure only, and opens a preview windows" />
213
  | <input type="checkbox" name="cff-revisions-in-preview" <?php if(get_option('CP_CALCULATEDFIELDSF_REVISIONS_IN_PREVIEW', true)) print 'CHECKED'; ?> /><?php _e('Generate revisions in the form preview as well', 'calculated-fields-form'); ?>
214
  </p>
215
-
216
- <div id="metabox_basic_settings" class="postbox" >
 
 
 
 
 
 
 
 
217
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Define Texts', 'calculated-fields-form' ); ?></span></h3>
218
  <div class="inside">
219
  <table class="form-table">
220
  <tr valign="top">
221
  <th scope="row"><?php _e( 'Previous button label (text)', 'calculated-fields-form' ); ?>:</th>
222
- <td><input type="text" name="vs_text_previousbtn" size="40" value="<?php $label = esc_attr($form_obj->get_option('vs_text_previousbtn', 'Previous')); echo ($label==''?'Previous':$label); ?>" /></td>
223
  </tr>
224
  <tr valign="top">
225
  <th scope="row"><?php _e( 'Next button label (text)', 'calculated-fields-form' ); ?>:</th>
226
- <td><input type="text" name="vs_text_nextbtn" size="40" value="<?php $label = esc_attr($form_obj->get_option('vs_text_nextbtn', 'Next')); echo ($label==''?'Next':$label); ?>" /></td>
227
  </tr>
228
  <tr valign="top">
229
  <td colspan="2">
@@ -239,56 +247,57 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
239
  print '
240
  <tr valign="top">
241
  <th scope="row">'.$cpcff_text_attr[ 'label' ].':</th>
242
- <td><input type="text" name="cpcff_text_array['.$cpcff_text_index.'][text]" size="40" value="'. esc_attr( $cpcff_text_attr[ 'text' ] ).'" /></td>
243
  </tr>
244
  ';
245
  }
246
  }
247
  ?>
248
  </table>
 
249
  </div>
250
  </div>
251
 
252
- <div id="metabox_basic_settings" class="postbox" >
253
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Validation Settings', 'calculated-fields-form' ); ?></span></h3>
254
  <div class="inside">
255
  <table class="form-table">
256
  <tr valign="top">
257
  <th scope="row"><?php _e( '"is required" text', 'calculated-fields-form' ); ?>:</th>
258
- <td><input type="text" name="vs_text_is_required" size="40" value="<?php echo esc_attr($form_obj->get_option('vs_text_is_required', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_is_required)); ?>" /></td>
259
  </tr>
260
  <tr valign="top">
261
  <th scope="row"><?php _e( '"is email" text', 'calculated-fields-form' ); ?>:</th>
262
- <td><input type="text" name="vs_text_is_email" size="70" value="<?php echo esc_attr($form_obj->get_option('vs_text_is_email', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_is_email)); ?>" /></td>
263
  </tr>
264
  <tr valign="top">
265
  <th scope="row"><?php _e( '"is valid captcha" text', 'calculated-fields-form' ); ?>:</th>
266
- <td><input type="text" name="cv_text_enter_valid_captcha" size="70" value="<?php echo esc_attr($form_obj->get_option('cv_text_enter_valid_captcha', CP_CALCULATEDFIELDSF_DEFAULT_cv_text_enter_valid_captcha)); ?>" /></td>
267
  </tr>
268
 
269
  <tr valign="top">
270
  <th scope="row"><?php _e( '"is valid date (mm/dd/yyyy)" text', 'calculated-fields-form' ); ?>:</th>
271
- <td><input type="text" name="vs_text_datemmddyyyy" size="70" value="<?php echo esc_attr($form_obj->get_option('vs_text_datemmddyyyy', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_datemmddyyyy)); ?>" /></td>
272
  </tr>
273
  <tr valign="top">
274
  <th scope="row"><?php _e( '"is valid date (dd/mm/yyyy)" text', 'calculated-fields-form' ); ?>:</th>
275
- <td><input type="text" name="vs_text_dateddmmyyyy" size="70" value="<?php echo esc_attr($form_obj->get_option('vs_text_dateddmmyyyy', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_dateddmmyyyy)); ?>" /></td>
276
  </tr>
277
  <tr valign="top">
278
  <th scope="row"><?php _e( '"is number" text', 'calculated-fields-form' ); ?>:</th>
279
- <td><input type="text" name="vs_text_number" size="70" value="<?php echo esc_attr($form_obj->get_option('vs_text_number', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_number)); ?>" /></td>
280
  </tr>
281
  <tr valign="top">
282
  <th scope="row"><?php _e( '"only digits" text', 'calculated-fields-form' ); ?>:</th>
283
- <td><input type="text" name="vs_text_digits" size="70" value="<?php echo esc_attr($form_obj->get_option('vs_text_digits', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_digits)); ?>" /></td>
284
  </tr>
285
  <tr valign="top">
286
  <th scope="row"><?php _e( '"under maximum" text', 'calculated-fields-form' ); ?>:</th>
287
- <td><input type="text" name="vs_text_max" size="70" value="<?php echo esc_attr($form_obj->get_option('vs_text_max', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_max)); ?>" /></td>
288
  </tr>
289
  <tr valign="top">
290
  <th scope="row"><?php _e( '"over minimum" text', 'calculated-fields-form' ); ?>:</th>
291
- <td><input type="text" name="vs_text_min" size="70" value="<?php echo esc_attr($form_obj->get_option('vs_text_min', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_min)); ?>" /></td>
292
  </tr>
293
  <?php
294
  // Display all other text fields
@@ -299,13 +308,14 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
299
  print '
300
  <tr valign="top">
301
  <th scope="row">'.$cpcff_text_attr[ 'label' ].':</th>
302
- <td><input type="text" name="cpcff_text_array[errors]['.$cpcff_text_index.'][text]" size="40" value="'. esc_attr( $cpcff_text_attr[ 'text' ] ).'" /></td>
303
  </tr>
304
  ';
305
  }
306
  }
307
  ?>
308
  </table>
 
309
  </div>
310
  </div>
311
 
@@ -327,19 +337,19 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
327
 
328
  <br /><br /><br />
329
 
330
- <h3><?php _e( 'The following settings are available only in the <a href="https://cff.dwbooster.com/">pro version</a>', 'calculated-fields-form' ); ?>:</h3>
331
 
332
  <h2><?php _e( 'Form Processing and Payment Settings', 'calculated-fields-form' ); ?>:</h2>
333
  <hr />
334
 
335
- <div id="metabox_basic_settings0" class="postbox" style="position:relative;">
336
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Payment Settings', 'calculated-fields-form' ); ?></span></h3>
337
  <div class="inside">
338
 
339
  <table class="form-table">
340
  <tr valign="top">
341
  <th scope="row"><?php _e( 'Request cost', 'calculated-fields-form' ); ?></th>
342
- <td><select name="request_cost" id="request_cost" ></select></td>
343
  </tr>
344
 
345
  <tr valign="top">
@@ -349,13 +359,13 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
349
 
350
  <tr valign="top">
351
  <th scope="row"><?php _e( 'Base amount', 'calculated-fields-form' ); ?>:</th>
352
- <td><input type="text" name="paypal_base_amount" value="<?php echo esc_attr($form_obj->get_option( 'paypal_base_amount', '0.01' ) ); ?>" /> <?php _e( 'Minimum amount to charge. If the final price is lesser than this number, the base amount will be applied.', 'calculated-fields-form' ); ?>
353
  </td>
354
  </tr>
355
 
356
  <tr valign="top">
357
  <th scope="row"><?php _e( 'Paypal product name', 'calculated-fields-form' ); ?></th>
358
- <td><input type="text" name="paypal_product_name" size="50" value="<?php echo esc_attr($form_obj->get_option('paypal_product_name',CP_CALCULATEDFIELDSF_DEFAULT_PRODUCT_NAME)); ?>" /></td>
359
  </tr>
360
 
361
  <tr valign="top">
@@ -373,16 +383,17 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
373
  </select></nobr>
374
  &nbsp; &nbsp;
375
  <nobr><?php _e( 'Valid until', 'calculated-fields-form' ); ?>: <input type="text" size="10" name="dex_dc_expires" id="dex_dc_expires" value="" /></nobr>&nbsp; &nbsp; &nbsp;
376
- <input type="button" name="dex_dc_subccode" id="dex_dc_subccode" value="<?php esc_attr_e( 'Add', 'calculated-fields-form' ); ?>" onclick="alert('This feature ins\'t available in this version');" />
377
  <br />
378
- <em><?php _e( 'Note: Expiration date based in server time. Server time now is', 'calculated-fields-form' ); ?> <?php echo date("Y-m-d H:i"); ?></em>
379
  </td>
380
  </tr>
381
  </table>
 
382
  </div>
383
  </div>
384
 
385
- <div id="metabox_basic_settings1" class="postbox" style="position:relative;">
386
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Paypal Payment Configuration', 'calculated-fields-form' ); ?></span></h3>
387
  <div class="inside">
388
 
@@ -392,7 +403,7 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
392
  <td><select name="enable_paypal">
393
  <option value="0"><?php _e( 'No', 'calculated-fields-form' ); ?></option>
394
  </select>
395
- <br /><em style="font-size:11px;"><?php _e( 'Note: If "Optional" is selected, a radiobutton will appear in the form to select if the payment will be made with PayPal or not.', 'calculated-fields-form' ); ?></em>
396
  <div id="cff_paypal_options_label" style="margin-top:10px;background:#EEF5FB;border: 1px dotted #888888;padding:10px;width:260px;">
397
  <?php _e( 'Label for the "<strong>Pay with PayPal</strong>" option', 'calculated-fields-form' ); ?>:<br />
398
  <input type="text" size="40" style="width:250px;" />
@@ -401,7 +412,7 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
401
 
402
  <tr valign="top">
403
  <th scope="row"><?php _e( 'Paypal Mode', 'calculated-fields-form' ); ?></th>
404
- <td><select name="paypal_mode">
405
  <option value="production" <?php if ($form_obj->get_option('paypal_mode',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_MODE) != 'sandbox') echo 'selected'; ?>><?php _e( 'Production - real payments processed', 'calculated-fields-form' ); ?></option>
406
  <option value="sandbox" <?php if ($form_obj->get_option('paypal_mode',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_MODE) == 'sandbox') echo 'selected'; ?>><?php _e( 'SandBox - PayPal testing sandbox area', 'calculated-fields-form' ); ?></option>
407
  </select>
@@ -410,12 +421,12 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
410
 
411
  <tr valign="top">
412
  <th scope="row"><?php _e( 'Paypal email', 'calculated-fields-form' ); ?></th>
413
- <td><input type="text" name="paypal_email" size="40" value="<?php echo esc_attr($form_obj->get_option('paypal_email',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_EMAIL)); ?>" /></td>
414
  </tr>
415
 
416
  <tr valign="top">
417
  <th scope="row"><?php _e( 'A $0 amount to pay means', 'calculated-fields-form' ); ?>:</th>
418
- <td><select name="paypal_zero_payment">
419
  <option value="0" <?php if ($form_obj->get_option('paypal_zero_payment',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_ZERO_PAYMENT) != '1') echo 'selected'; ?>><?php _e( 'Let the user enter any amount at PayPal (ex: for a donation)', 'calculated-fields-form' ); ?></option>
420
  <option value="1" <?php if ($form_obj->get_option('paypal_zero_payment',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_ZERO_PAYMENT) == '1') echo 'selected'; ?>><?php _e( 'Don\'t require any payment. Form is submitted skiping the PayPal page.', 'calculated-fields-form' ); ?></option>
421
  </select>
@@ -429,7 +440,7 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
429
 
430
  <tr valign="top">
431
  <th scope="row"><?php _e( 'Payment frequency', 'calculated-fields-form' ); ?></th>
432
- <td><select name="paypal_recurrent">
433
  <option value="0" <?php if ($form_obj->get_option('paypal_recurrent',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_RECURRENT) == '0' ||
434
  $form_obj->get_option('paypal_recurrent',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_RECURRENT) == ''
435
  ) echo 'selected'; ?>><?php _e( 'One time payment (default option, user is billed only once)', 'calculated-fields-form' ); ?></option>
@@ -444,7 +455,7 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
444
  <th scope="row"><?php _e( 'Paypal prompt buyers for shipping address', 'calculated-fields-form' ); ?></th>
445
  <td>
446
  <?php $paypal_address = $form_obj->get_option('paypal_address', 1); ?>
447
- <select name="paypal_address">
448
  <option value="1" <?php if($paypal_address == 1) print 'SELECTED'; ?>><?php _e('Do not prompt for an address', 'calculated-fields-form'); ?></option>
449
  <option value="0" <?php if($paypal_address == 0) print 'SELECTED'; ?>><?php _e('Prompt for an address, but do not require one', 'calculated-fields-form'); ?></option>
450
  <option value="2" <?php if($paypal_address == 2) print 'SELECTED'; ?>><?php _e('Prompt for an address and require one', 'calculated-fields-form'); ?></option>
@@ -452,25 +463,25 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
452
  </td>
453
  </tr>
454
  </table>
455
-
456
  </div>
457
  </div>
458
 
459
- <div id="metabox_basic_settings2" class="postbox" >
460
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Form Processing / Email Settings', 'calculated-fields-form' ); ?></span></h3>
461
  <div class="inside">
462
  <table class="form-table">
463
  <tr valign="top">
464
  <th scope="row"><?php _e( '"From" email', 'calculated-fields-form' ); ?></th>
465
- <td><input type="text" name="fp_from_email" size="40" value="<?php echo esc_attr($form_obj->get_option('fp_from_email', CP_CALCULATEDFIELDSF_DEFAULT_fp_from_email)); ?>" /><br><b><em>Ex: admin@<?php echo str_replace('www.','',$_SERVER["HTTP_HOST"]); ?></em></b><br><em><?php _e( 'This email is required if the "From fixed email address" option is selected, or it is enabled the email copy to the user.', 'calculated-fields-form' ); ?></em></td>
466
  </tr>
467
  <tr valign="top">
468
  <th scope="row"><?php _e( 'Destination emails (comma separated)', 'calculated-fields-form' ); ?></th>
469
- <td><input type="text" name="fp_destination_emails" size="40" value="<?php echo esc_attr($form_obj->get_option('fp_destination_emails', CP_CALCULATEDFIELDSF_DEFAULT_fp_destination_emails)); ?>" /></td>
470
  </tr>
471
  <tr valign="top">
472
  <th scope="row"><?php _e( 'Email subject', 'calculated-fields-form' ); ?></th>
473
- <td><input type="text" name="fp_subject" size="70" value="<?php echo esc_attr($form_obj->get_option('fp_subject', CP_CALCULATEDFIELDSF_DEFAULT_fp_subject)); ?>" /></td>
474
  </tr>
475
  <tr valign="top">
476
  <th scope="row"><?php _e( 'Include additional information?', 'calculated-fields-form' ); ?></th>
@@ -479,18 +490,18 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
479
  <select name="fp_inc_additional_info">
480
  <option value="true"<?php if ($option == 'true') echo ' selected'; ?>><?php _e( 'Yes', 'calculated-fields-form' ); ?></option>
481
  <option value="false"<?php if ($option == 'false') echo ' selected'; ?>><?php _e( 'No', 'calculated-fields-form' ); ?></option>
482
- </select>&nbsp;<em><?php _e('If the "No" option is selected the plugin won\'t capture the IP address of users.','calculated-fields-form'); ?></em>
483
  </td>
484
  </tr>
485
  <tr valign="top">
486
  <th scope="row"><?php _e( 'Thank you page (after sending the message)', 'calculated-fields-form' ); ?></th>
487
- <td><input type="text" name="fp_return_page" size="70" value="<?php echo esc_attr($form_obj->get_option('fp_return_page', CP_CALCULATEDFIELDSF_DEFAULT_fp_return_page)); ?>" /></td>
488
  </tr>
489
  <tr valign="top">
490
  <th scope="row"><?php _e( 'Email format?', 'calculated-fields-form' ); ?></th>
491
  <td>
492
  <?php $option = $form_obj->get_option('fp_emailformat', CP_CALCULATEDFIELDSF_DEFAULT_email_format); ?>
493
- <select name="fp_emailformat">
494
  <option value="text"<?php if ($option != 'html') echo ' selected'; ?>><?php _e( 'Plain Text (default)', 'calculated-fields-form' ); ?></option>
495
  <option value="html"<?php if ($option == 'html') echo ' selected'; ?>><?php _e( 'HTML (use html in the textarea below)', 'calculated-fields-form' ); ?></option>
496
  </select>
@@ -498,14 +509,15 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
498
  </tr>
499
  <tr valign="top">
500
  <th scope="row"><?php _e( 'Message', 'calculated-fields-form' ); ?></th>
501
- <td><textarea type="text" name="fp_message" rows="6" cols="80"><?php echo $form_obj->get_option('fp_message', CP_CALCULATEDFIELDSF_DEFAULT_fp_message); ?></textarea></td>
502
  </tr>
503
  </table>
 
504
  </div>
505
  </div>
506
 
507
 
508
- <div id="metabox_basic_settings3" class="postbox" >
509
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Email Copy to User', 'calculated-fields-form' ); ?></span></h3>
510
  <div class="inside">
511
  <table class="form-table">
@@ -521,17 +533,17 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
521
  </tr>
522
  <tr valign="top">
523
  <th scope="row"><?php _e( 'Email field on the form', 'calculated-fields-form' ); ?></th>
524
- <td><select id="cu_user_email_field" name="cu_user_email_field" def="<?php echo esc_attr($form_obj->get_option('cu_user_email_field', CP_CALCULATEDFIELDSF_DEFAULT_cu_user_email_field)); ?>"></select></td>
525
  </tr>
526
  <tr valign="top">
527
  <th scope="row"><?php _e( 'Email subject', 'calculated-fields-form' ); ?></th>
528
- <td><input type="text" name="cu_subject" size="70" value="<?php echo esc_attr($form_obj->get_option('cu_subject', CP_CALCULATEDFIELDSF_DEFAULT_cu_subject)); ?>" /></td>
529
  </tr>
530
  <tr valign="top">
531
  <th scope="row"><?php _e( 'Email format?', 'calculated-fields-form' ); ?></th>
532
  <td>
533
  <?php $option = $form_obj->get_option('cu_emailformat', CP_CALCULATEDFIELDSF_DEFAULT_email_format); ?>
534
- <select name="cu_emailformat">
535
  <option value="text"<?php if ($option != 'html') echo ' selected'; ?>><?php _e( 'Plain Text (default)', 'calculated-fields-form' ); ?></option>
536
  <option value="html"<?php if ($option == 'html') echo ' selected'; ?>><?php _e( 'HTML (use html in the textarea below)', 'calculated-fields-form' ); ?></option>
537
  </select>
@@ -539,14 +551,14 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
539
  </tr>
540
  <tr valign="top">
541
  <th scope="row"><?php _e( 'Message', 'calculated-fields-form' ); ?></th>
542
- <td><textarea type="text" name="cu_message" rows="6" cols="80"><?php echo $form_obj->get_option('cu_message', CP_CALCULATEDFIELDSF_DEFAULT_cu_message); ?></textarea></td>
543
  </tr>
544
  </table>
 
545
  </div>
546
  </div>
547
 
548
-
549
- <div id="metabox_basic_settings4" class="postbox" >
550
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Captcha Verification', 'calculated-fields-form' ); ?></span></h3>
551
  <div class="inside">
552
  <table class="form-table">
@@ -609,8 +621,10 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
609
  </td>
610
  </tr>
611
  </table>
 
612
  </div>
613
  </div>
 
614
  <?php
615
  do_action('cpcff_form_settings', CP_CALCULATEDFIELDSF_ID);
616
  ?>
57
  print '<br><span style="font-size:14px;font-style:italic;">'.__('Direct form URL', 'calculated-fields-form').': <a href="'.esc_attr($url).'" target="_blank">'.$url.'</a></span>';
58
  }
59
  ?></h1>
60
+ <input type="button" name="backbtn" value="<?php esc_attr_e( 'Back to items list...', 'calculated-fields-form' ); ?>" onclick="document.location='admin.php?page=cp_calculated_fields_form';" class="button-secondary" />
61
  <br /><br />
62
 
63
+ <form method="post" action="" id="cpformconf" name="cpformconf" class="cff_form_builder">
64
  <input type="hidden" name="_cpcff_nonce" value="<?php echo wp_create_nonce( 'cff-form-settings' ); ?>" />
65
  <input name="cp_calculatedfieldsf_post_options" type="hidden" value="1" />
66
  <input name="cp_calculatedfieldsf_id" type="hidden" value="<?php echo CP_CALCULATEDFIELDSF_ID; ?>" />
70
  <h2><?php _e( 'Form Settings', 'calculated-fields-form' ); ?>:</h2>
71
  <hr />
72
  <div><?php _e( '* Different form styles available on the tab Form Settings &gt;&gt; Form Template', 'calculated-fields-form' ); ?></div>
73
+ <div id="metabox_form_structure" class="postbox" >
74
  <div class="hndle">
75
  <h3 style="padding:5px;display:inline-block;"><span><?php _e( 'Form Builder', 'calculated-fields-form' ); ?></span></h3>
76
  <div class="cff-revisions-container">
99
  echo $cff_structure_error;
100
  }
101
  ?></div>
102
+ <p style="border:1px solid #F0AD4E;background:#FBE6CA;padding:10px;"><span style="font-weight:bold;"><?php _e('If the form is not loading in the public website, go to the settings page of the plugin through the menu option: "Settings/Calculated Fields Form", select the "Classic" option for the attribute: "Script load method", and press the "Update" button.','calculated-fields-form'); ?></span><br /><?php _e( 'If you need also the form to be sent to the server side for processing (for example to deliver emails) then the <a href="https://cff.dwbooster.com/download" target="_blank">Commercial versions</a> of the plugin are required.', 'calculated-fields-form' ); ?></p>
103
  <input type="hidden" name="form_structure" id="form_structure" value="<?php print esc_attr(preg_replace('/&quot;/i', '&amp;quot;', json_encode($form_obj->get_option( 'form_structure', CP_CALCULATEDFIELDSF_DEFAULT_form_structure )))); ?>" />
104
  <input type="hidden" name="templates" id="templates" value="<?php print esc_attr( json_encode( CPCFF_TEMPLATES::load_templates() ) ); ?>" />
105
  <link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/themes/cupertino/jquery-ui.min.css" type="text/css" rel="stylesheet" property="stylesheet" />
118
  result = window.confirm('<?php print esc_js(__('The action will load the revision selected, the data are not stored will be lose. Do you want continue?', 'calculated-fields-form'));?>');
119
  if(result)
120
  {
121
+ $calculatedfieldsfQuery('<form method="post" action="" id="cpformconf" name="cpformconf" class="cff_form_builder"><input type="hidden" name="_cpcff_nonce" value="<?php echo wp_create_nonce( 'cff-form-settings' ); ?>" /><input name="cp_calculatedfieldsf_id" type="hidden" value="<?php echo CP_CALCULATEDFIELDSF_ID; ?>" /><input type="hidden" name="cpcff_revision_to_apply" value="'+revision+'"></form>').appendTo('body').submit();
122
  }
123
  }
124
  }
150
  f.fBuild.addItem($calculatedfieldsfQuery(this).attr("id"));
151
  });
152
 
153
+ jQuery(".metabox_disabled_section")
154
  .click( function(){
155
  if(confirm("<?php _e( 'These features aren\'t available in this version. Do you want to open the plugin\'s page to check other versions?', 'calculated-fields-form' ); ?>"))
156
  document.location = 'https://cff.dwbooster.com/';
212
  <input type="button" name="previewbtn" id="previewbtn" class="button-primary" value="<?php esc_attr_e( 'Preview', 'calculated-fields-form' ); ?>" onclick="jQuery.fbuilder.preview( this );" title="Saves the form's structure only, and opens a preview windows" />
213
  | <input type="checkbox" name="cff-revisions-in-preview" <?php if(get_option('CP_CALCULATEDFIELDSF_REVISIONS_IN_PREVIEW', true)) print 'CHECKED'; ?> /><?php _e('Generate revisions in the form preview as well', 'calculated-fields-form'); ?>
214
  </p>
215
+ <div style="margin-bottom:20px;">
216
+ <a href="#metabox_define_texts"><?php _e('Texts definition', 'calculated-fields-form'); ?></a>&nbsp;|&nbsp;
217
+ <a href="#metabox_define_validation_texts"><?php _e('Error texts', 'calculated-fields-form'); ?></a>&nbsp;|&nbsp;
218
+ <a href="#metabox_payment_settings"><?php _e('General payment settings', 'calculated-fields-form'); ?></a>&nbsp;|&nbsp;
219
+ <a href="#metabox_paypal_integration"><?php _e('PayPal integration', 'calculated-fields-form'); ?></a>&nbsp;|&nbsp;
220
+ <a href="#metabox_notification_email"><?php _e('Notification email', 'calculated-fields-form'); ?></a>&nbsp;|&nbsp;
221
+ <a href="#metabox_email_copy_to_user"><?php _e('Email copy to user', 'calculated-fields-form'); ?></a>&nbsp;|&nbsp;
222
+ <a href="#metabox_captcha_settings"><?php _e('Captcha settings', 'calculated-fields-form'); ?></a>
223
+ </div>
224
+ <div id="metabox_define_texts" class="postbox" >
225
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Define Texts', 'calculated-fields-form' ); ?></span></h3>
226
  <div class="inside">
227
  <table class="form-table">
228
  <tr valign="top">
229
  <th scope="row"><?php _e( 'Previous button label (text)', 'calculated-fields-form' ); ?>:</th>
230
+ <td><input type="text" name="vs_text_previousbtn" class="width75" value="<?php $label = esc_attr($form_obj->get_option('vs_text_previousbtn', 'Previous')); echo ($label==''?'Previous':$label); ?>" /></td>
231
  </tr>
232
  <tr valign="top">
233
  <th scope="row"><?php _e( 'Next button label (text)', 'calculated-fields-form' ); ?>:</th>
234
+ <td><input type="text" name="vs_text_nextbtn" class="width75" value="<?php $label = esc_attr($form_obj->get_option('vs_text_nextbtn', 'Next')); echo ($label==''?'Next':$label); ?>" /></td>
235
  </tr>
236
  <tr valign="top">
237
  <td colspan="2">
247
  print '
248
  <tr valign="top">
249
  <th scope="row">'.$cpcff_text_attr[ 'label' ].':</th>
250
+ <td><input type="text" name="cpcff_text_array['.$cpcff_text_index.'][text]" class="width75" value="'. esc_attr( $cpcff_text_attr[ 'text' ] ).'" /></td>
251
  </tr>
252
  ';
253
  }
254
  }
255
  ?>
256
  </table>
257
+ <div class="cff-goto-top"><a href="#cpformconf"><?php _e('Up to form structure', 'calculated-fields-form'); ?></a></div>
258
  </div>
259
  </div>
260
 
261
+ <div id="metabox_define_validation_texts" class="postbox" >
262
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Validation Settings', 'calculated-fields-form' ); ?></span></h3>
263
  <div class="inside">
264
  <table class="form-table">
265
  <tr valign="top">
266
  <th scope="row"><?php _e( '"is required" text', 'calculated-fields-form' ); ?>:</th>
267
+ <td><input type="text" name="vs_text_is_required" class="width75" value="<?php echo esc_attr($form_obj->get_option('vs_text_is_required', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_is_required)); ?>" /></td>
268
  </tr>
269
  <tr valign="top">
270
  <th scope="row"><?php _e( '"is email" text', 'calculated-fields-form' ); ?>:</th>
271
+ <td><input type="text" name="vs_text_is_email" class="width75" value="<?php echo esc_attr($form_obj->get_option('vs_text_is_email', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_is_email)); ?>" /></td>
272
  </tr>
273
  <tr valign="top">
274
  <th scope="row"><?php _e( '"is valid captcha" text', 'calculated-fields-form' ); ?>:</th>
275
+ <td><input type="text" name="cv_text_enter_valid_captcha" class="width75" value="<?php echo esc_attr($form_obj->get_option('cv_text_enter_valid_captcha', CP_CALCULATEDFIELDSF_DEFAULT_cv_text_enter_valid_captcha)); ?>" /></td>
276
  </tr>
277
 
278
  <tr valign="top">
279
  <th scope="row"><?php _e( '"is valid date (mm/dd/yyyy)" text', 'calculated-fields-form' ); ?>:</th>
280
+ <td><input type="text" name="vs_text_datemmddyyyy" class="width75" value="<?php echo esc_attr($form_obj->get_option('vs_text_datemmddyyyy', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_datemmddyyyy)); ?>" /></td>
281
  </tr>
282
  <tr valign="top">
283
  <th scope="row"><?php _e( '"is valid date (dd/mm/yyyy)" text', 'calculated-fields-form' ); ?>:</th>
284
+ <td><input type="text" name="vs_text_dateddmmyyyy" class="width75" value="<?php echo esc_attr($form_obj->get_option('vs_text_dateddmmyyyy', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_dateddmmyyyy)); ?>" /></td>
285
  </tr>
286
  <tr valign="top">
287
  <th scope="row"><?php _e( '"is number" text', 'calculated-fields-form' ); ?>:</th>
288
+ <td><input type="text" name="vs_text_number" class="width75" value="<?php echo esc_attr($form_obj->get_option('vs_text_number', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_number)); ?>" /></td>
289
  </tr>
290
  <tr valign="top">
291
  <th scope="row"><?php _e( '"only digits" text', 'calculated-fields-form' ); ?>:</th>
292
+ <td><input type="text" name="vs_text_digits" class="width75" value="<?php echo esc_attr($form_obj->get_option('vs_text_digits', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_digits)); ?>" /></td>
293
  </tr>
294
  <tr valign="top">
295
  <th scope="row"><?php _e( '"under maximum" text', 'calculated-fields-form' ); ?>:</th>
296
+ <td><input type="text" name="vs_text_max" class="width75" value="<?php echo esc_attr($form_obj->get_option('vs_text_max', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_max)); ?>" /></td>
297
  </tr>
298
  <tr valign="top">
299
  <th scope="row"><?php _e( '"over minimum" text', 'calculated-fields-form' ); ?>:</th>
300
+ <td><input type="text" name="vs_text_min" class="width75" value="<?php echo esc_attr($form_obj->get_option('vs_text_min', CP_CALCULATEDFIELDSF_DEFAULT_vs_text_min)); ?>" /></td>
301
  </tr>
302
  <?php
303
  // Display all other text fields
308
  print '
309
  <tr valign="top">
310
  <th scope="row">'.$cpcff_text_attr[ 'label' ].':</th>
311
+ <td><input type="text" name="cpcff_text_array[errors]['.$cpcff_text_index.'][text]" class="width75" value="'. esc_attr( $cpcff_text_attr[ 'text' ] ).'" /></td>
312
  </tr>
313
  ';
314
  }
315
  }
316
  ?>
317
  </table>
318
+ <div class="cff-goto-top"><a href="#cpformconf"><?php _e('Up to form structure', 'calculated-fields-form'); ?></a></div>
319
  </div>
320
  </div>
321
 
337
 
338
  <br /><br /><br />
339
 
340
+ <h3><?php _e( 'The following settings are available only in the <a href="https://cff.dwbooster.com/download" target="_blank">Commercial versions</a>', 'calculated-fields-form' ); ?>:</h3>
341
 
342
  <h2><?php _e( 'Form Processing and Payment Settings', 'calculated-fields-form' ); ?>:</h2>
343
  <hr />
344
 
345
+ <div id="metabox_payment_settings" class="postbox metabox_disabled_section" style="position:relative;">
346
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Payment Settings', 'calculated-fields-form' ); ?></span></h3>
347
  <div class="inside">
348
 
349
  <table class="form-table">
350
  <tr valign="top">
351
  <th scope="row"><?php _e( 'Request cost', 'calculated-fields-form' ); ?></th>
352
+ <td><select name="request_cost" id="request_cost" class="width75"></select></td>
353
  </tr>
354
 
355
  <tr valign="top">
359
 
360
  <tr valign="top">
361
  <th scope="row"><?php _e( 'Base amount', 'calculated-fields-form' ); ?>:</th>
362
+ <td><input type="text" name="paypal_base_amount" value="<?php echo esc_attr($form_obj->get_option( 'paypal_base_amount', '0.01' ) ); ?>" /><br><i style="font-size:11px;"><?php _e( 'Minimum amount to charge. If the final price is lesser than this number, the base amount will be applied.', 'calculated-fields-form' ); ?></i>
363
  </td>
364
  </tr>
365
 
366
  <tr valign="top">
367
  <th scope="row"><?php _e( 'Paypal product name', 'calculated-fields-form' ); ?></th>
368
+ <td><input type="text" name="paypal_product_name" class="width75" value="<?php echo esc_attr($form_obj->get_option('paypal_product_name',CP_CALCULATEDFIELDSF_DEFAULT_PRODUCT_NAME)); ?>" /></td>
369
  </tr>
370
 
371
  <tr valign="top">
383
  </select></nobr>
384
  &nbsp; &nbsp;
385
  <nobr><?php _e( 'Valid until', 'calculated-fields-form' ); ?>: <input type="text" size="10" name="dex_dc_expires" id="dex_dc_expires" value="" /></nobr>&nbsp; &nbsp; &nbsp;
386
+ <input type="button" name="dex_dc_subccode" id="dex_dc_subccode" value="<?php esc_attr_e( 'Add', 'calculated-fields-form' ); ?>" onclick="alert('This feature ins\'t available in this version');" class="button-secondary" />
387
  <br />
388
+ <em style="font-size:11px;"><?php _e( 'Note: Expiration date based in server time. Server time now is', 'calculated-fields-form' ); ?> <?php echo date("Y-m-d H:i"); ?></em>
389
  </td>
390
  </tr>
391
  </table>
392
+ <div class="cff-goto-top"><a href="#cpformconf"><?php _e('Up to form structure', 'calculated-fields-form'); ?></a></div>
393
  </div>
394
  </div>
395
 
396
+ <div id="metabox_paypal_integration" class="postbox metabox_disabled_section">
397
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Paypal Payment Configuration', 'calculated-fields-form' ); ?></span></h3>
398
  <div class="inside">
399
 
403
  <td><select name="enable_paypal">
404
  <option value="0"><?php _e( 'No', 'calculated-fields-form' ); ?></option>
405
  </select>
406
+ <br /><i style="font-size:11px;"><?php _e( 'Note: If "Optional" is selected, a radiobutton will appear in the form to select if the payment will be made with PayPal or not.', 'calculated-fields-form' ); ?></i>
407
  <div id="cff_paypal_options_label" style="margin-top:10px;background:#EEF5FB;border: 1px dotted #888888;padding:10px;width:260px;">
408
  <?php _e( 'Label for the "<strong>Pay with PayPal</strong>" option', 'calculated-fields-form' ); ?>:<br />
409
  <input type="text" size="40" style="width:250px;" />
412
 
413
  <tr valign="top">
414
  <th scope="row"><?php _e( 'Paypal Mode', 'calculated-fields-form' ); ?></th>
415
+ <td><select name="paypal_mode" class="width75">
416
  <option value="production" <?php if ($form_obj->get_option('paypal_mode',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_MODE) != 'sandbox') echo 'selected'; ?>><?php _e( 'Production - real payments processed', 'calculated-fields-form' ); ?></option>
417
  <option value="sandbox" <?php if ($form_obj->get_option('paypal_mode',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_MODE) == 'sandbox') echo 'selected'; ?>><?php _e( 'SandBox - PayPal testing sandbox area', 'calculated-fields-form' ); ?></option>
418
  </select>
421
 
422
  <tr valign="top">
423
  <th scope="row"><?php _e( 'Paypal email', 'calculated-fields-form' ); ?></th>
424
+ <td><input type="text" name="paypal_email" class="width75" value="<?php echo esc_attr($form_obj->get_option('paypal_email',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_EMAIL)); ?>" /></td>
425
  </tr>
426
 
427
  <tr valign="top">
428
  <th scope="row"><?php _e( 'A $0 amount to pay means', 'calculated-fields-form' ); ?>:</th>
429
+ <td><select name="paypal_zero_payment" class="width75">
430
  <option value="0" <?php if ($form_obj->get_option('paypal_zero_payment',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_ZERO_PAYMENT) != '1') echo 'selected'; ?>><?php _e( 'Let the user enter any amount at PayPal (ex: for a donation)', 'calculated-fields-form' ); ?></option>
431
  <option value="1" <?php if ($form_obj->get_option('paypal_zero_payment',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_ZERO_PAYMENT) == '1') echo 'selected'; ?>><?php _e( 'Don\'t require any payment. Form is submitted skiping the PayPal page.', 'calculated-fields-form' ); ?></option>
432
  </select>
440
 
441
  <tr valign="top">
442
  <th scope="row"><?php _e( 'Payment frequency', 'calculated-fields-form' ); ?></th>
443
+ <td><select name="paypal_recurrent" class="width75">
444
  <option value="0" <?php if ($form_obj->get_option('paypal_recurrent',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_RECURRENT) == '0' ||
445
  $form_obj->get_option('paypal_recurrent',CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_RECURRENT) == ''
446
  ) echo 'selected'; ?>><?php _e( 'One time payment (default option, user is billed only once)', 'calculated-fields-form' ); ?></option>
455
  <th scope="row"><?php _e( 'Paypal prompt buyers for shipping address', 'calculated-fields-form' ); ?></th>
456
  <td>
457
  <?php $paypal_address = $form_obj->get_option('paypal_address', 1); ?>
458
+ <select name="paypal_address" class="width75">
459
  <option value="1" <?php if($paypal_address == 1) print 'SELECTED'; ?>><?php _e('Do not prompt for an address', 'calculated-fields-form'); ?></option>
460
  <option value="0" <?php if($paypal_address == 0) print 'SELECTED'; ?>><?php _e('Prompt for an address, but do not require one', 'calculated-fields-form'); ?></option>
461
  <option value="2" <?php if($paypal_address == 2) print 'SELECTED'; ?>><?php _e('Prompt for an address and require one', 'calculated-fields-form'); ?></option>
463
  </td>
464
  </tr>
465
  </table>
466
+ <div class="cff-goto-top"><a href="#cpformconf"><?php _e('Up to form structure', 'calculated-fields-form'); ?></a></div>
467
  </div>
468
  </div>
469
 
470
+ <div id="metabox_notification_email" class="postbox metabox_disabled_section" >
471
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Form Processing / Email Settings', 'calculated-fields-form' ); ?></span></h3>
472
  <div class="inside">
473
  <table class="form-table">
474
  <tr valign="top">
475
  <th scope="row"><?php _e( '"From" email', 'calculated-fields-form' ); ?></th>
476
+ <td><input type="text" name="fp_from_email" class="width75" value="<?php echo esc_attr($form_obj->get_option('fp_from_email', CP_CALCULATEDFIELDSF_DEFAULT_fp_from_email)); ?>" /><br><b><em style="font-size:11px;">Ex: admin@<?php echo str_replace('www.','',$_SERVER["HTTP_HOST"]); ?></em></b><br><em style="font-size:11px;"><?php _e( 'This email is required if the "From fixed email address" option is selected, or it is enabled the email copy to the user.', 'calculated-fields-form' ); ?></em></td>
477
  </tr>
478
  <tr valign="top">
479
  <th scope="row"><?php _e( 'Destination emails (comma separated)', 'calculated-fields-form' ); ?></th>
480
+ <td><input type="text" name="fp_destination_emails" class="width75" value="<?php echo esc_attr($form_obj->get_option('fp_destination_emails', CP_CALCULATEDFIELDSF_DEFAULT_fp_destination_emails)); ?>" /></td>
481
  </tr>
482
  <tr valign="top">
483
  <th scope="row"><?php _e( 'Email subject', 'calculated-fields-form' ); ?></th>
484
+ <td><input type="text" name="fp_subject" class="width75" value="<?php echo esc_attr($form_obj->get_option('fp_subject', CP_CALCULATEDFIELDSF_DEFAULT_fp_subject)); ?>" /></td>
485
  </tr>
486
  <tr valign="top">
487
  <th scope="row"><?php _e( 'Include additional information?', 'calculated-fields-form' ); ?></th>
490
  <select name="fp_inc_additional_info">
491
  <option value="true"<?php if ($option == 'true') echo ' selected'; ?>><?php _e( 'Yes', 'calculated-fields-form' ); ?></option>
492
  <option value="false"<?php if ($option == 'false') echo ' selected'; ?>><?php _e( 'No', 'calculated-fields-form' ); ?></option>
493
+ </select>&nbsp;<em style="font-size:11px;"><?php _e('If the "No" option is selected the plugin won\'t capture the IP address of users.','calculated-fields-form'); ?></em>
494
  </td>
495
  </tr>
496
  <tr valign="top">
497
  <th scope="row"><?php _e( 'Thank you page (after sending the message)', 'calculated-fields-form' ); ?></th>
498
+ <td><input type="text" name="fp_return_page" class="width75" value="<?php echo esc_attr($form_obj->get_option('fp_return_page', CP_CALCULATEDFIELDSF_DEFAULT_fp_return_page)); ?>" /></td>
499
  </tr>
500
  <tr valign="top">
501
  <th scope="row"><?php _e( 'Email format?', 'calculated-fields-form' ); ?></th>
502
  <td>
503
  <?php $option = $form_obj->get_option('fp_emailformat', CP_CALCULATEDFIELDSF_DEFAULT_email_format); ?>
504
+ <select name="fp_emailformat" class="width75">
505
  <option value="text"<?php if ($option != 'html') echo ' selected'; ?>><?php _e( 'Plain Text (default)', 'calculated-fields-form' ); ?></option>
506
  <option value="html"<?php if ($option == 'html') echo ' selected'; ?>><?php _e( 'HTML (use html in the textarea below)', 'calculated-fields-form' ); ?></option>
507
  </select>
509
  </tr>
510
  <tr valign="top">
511
  <th scope="row"><?php _e( 'Message', 'calculated-fields-form' ); ?></th>
512
+ <td><textarea type="text" name="fp_message" rows="6" class="width75"><?php echo $form_obj->get_option('fp_message', CP_CALCULATEDFIELDSF_DEFAULT_fp_message); ?></textarea></td>
513
  </tr>
514
  </table>
515
+ <div class="cff-goto-top"><a href="#cpformconf"><?php _e('Up to form structure', 'calculated-fields-form'); ?></a></div>
516
  </div>
517
  </div>
518
 
519
 
520
+ <div id="metabox_email_copy_to_user" class="postbox metabox_disabled_section" >
521
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Email Copy to User', 'calculated-fields-form' ); ?></span></h3>
522
  <div class="inside">
523
  <table class="form-table">
533
  </tr>
534
  <tr valign="top">
535
  <th scope="row"><?php _e( 'Email field on the form', 'calculated-fields-form' ); ?></th>
536
+ <td><select id="cu_user_email_field" name="cu_user_email_field" def="<?php echo esc_attr($form_obj->get_option('cu_user_email_field', CP_CALCULATEDFIELDSF_DEFAULT_cu_user_email_field)); ?>" class="width75"></select></td>
537
  </tr>
538
  <tr valign="top">
539
  <th scope="row"><?php _e( 'Email subject', 'calculated-fields-form' ); ?></th>
540
+ <td><input type="text" name="cu_subject" class="width75" value="<?php echo esc_attr($form_obj->get_option('cu_subject', CP_CALCULATEDFIELDSF_DEFAULT_cu_subject)); ?>" /></td>
541
  </tr>
542
  <tr valign="top">
543
  <th scope="row"><?php _e( 'Email format?', 'calculated-fields-form' ); ?></th>
544
  <td>
545
  <?php $option = $form_obj->get_option('cu_emailformat', CP_CALCULATEDFIELDSF_DEFAULT_email_format); ?>
546
+ <select name="cu_emailformat" class="width75">
547
  <option value="text"<?php if ($option != 'html') echo ' selected'; ?>><?php _e( 'Plain Text (default)', 'calculated-fields-form' ); ?></option>
548
  <option value="html"<?php if ($option == 'html') echo ' selected'; ?>><?php _e( 'HTML (use html in the textarea below)', 'calculated-fields-form' ); ?></option>
549
  </select>
551
  </tr>
552
  <tr valign="top">
553
  <th scope="row"><?php _e( 'Message', 'calculated-fields-form' ); ?></th>
554
+ <td><textarea type="text" name="cu_message" rows="6" class="width75"><?php echo $form_obj->get_option('cu_message', CP_CALCULATEDFIELDSF_DEFAULT_cu_message); ?></textarea></td>
555
  </tr>
556
  </table>
557
+ <div class="cff-goto-top"><a href="#cpformconf"><?php _e('Up to form structure', 'calculated-fields-form'); ?></a></div>
558
  </div>
559
  </div>
560
 
561
+ <div id="metabox_captcha_settings" class="postbox metabox_disabled_section" >
 
562
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Captcha Verification', 'calculated-fields-form' ); ?></span></h3>
563
  <div class="inside">
564
  <table class="form-table">
621
  </td>
622
  </tr>
623
  </table>
624
+ <div class="cff-goto-top"><a href="#cpformconf"><?php _e('Up to form structure', 'calculated-fields-form'); ?></a></div>
625
  </div>
626
  </div>
627
+ <a id="metabox_addons_section"></a>
628
  <?php
629
  do_action('cpcff_form_settings', CP_CALCULATEDFIELDSF_ID);
630
  ?>
inc/cpcff_admin_int_list.inc.php CHANGED
@@ -186,11 +186,11 @@ if ($message) echo "<div id='setting-error-settings_updated' class='updated sett
186
  <td nowrap><input type="text" name="calname_<?php echo $item->id; ?>" id="calname_<?php echo $item->id; ?>" value="<?php echo esc_attr($item->form_name); ?>" /></td>
187
 
188
  <td nowrap>
189
- <input type="button" name="calupdate_<?php echo $item->id; ?>" value="<?php esc_attr_e( 'Update', 'calculated-fields-form' ); ?>" onclick="cp_updateItem(<?php echo $item->id; ?>);" />
190
- <input type="button" name="calmanage_<?php echo $item->id; ?>" value="<?php esc_attr_e( 'Settings', 'calculated-fields-form' ); ?>" onclick="cp_manageSettings(<?php echo $item->id; ?>);" />
191
- <input type="button" name="calmanage_<?php echo $item->id; ?>" value="<?php esc_attr_e( 'Messages', 'calculated-fields-form' ); ?>" onclick="cp_viewMessages(<?php echo $item->id; ?>);" />
192
- <input type="button" name="calclone_<?php echo $item->id; ?>" value="<?php esc_attr_e( 'Clone', 'calculated-fields-form' ); ?>" onclick="cp_cloneItem(<?php echo $item->id; ?>);" />
193
- <input type="button" name="caldelete_<?php echo $item->id; ?>" value="<?php esc_attr_e( 'Delete', 'calculated-fields-form' ); ?>" onclick="cp_deleteItem(<?php echo $item->id; ?>);" />
194
  </td>
195
  <td nowrap>[CP_CALCULATED_FIELDS id="<?php echo $item->id; ?>"]</td>
196
  </tr>
@@ -208,7 +208,7 @@ if ($message) echo "<div id='setting-error-settings_updated' class='updated sett
208
 
209
  <form name="additem">
210
  <?php _e( 'Item Name', 'calculated-fields-form' ); ?>:<br />
211
- <input type="text" name="cp_itemname" id="cp_itemname" value="" onkeyup="cp_addItem_keyup( event );" /> <input type="button" onclick="cp_addItem();" name="gobtn" value="<?php esc_attr_e( 'Add', 'calculated-fields-form' ); ?>" />
212
  <br /><br />
213
  </form>
214
  </div>
@@ -216,7 +216,7 @@ if ($message) echo "<div id='setting-error-settings_updated' class='updated sett
216
  <div style="border:1px solid #F0AD4E;background:#FBE6CA;padding:10px;margin:10px 0;font-size:1.3em;">
217
  <div><?php _e('For additional resources visit the plugin\'s', 'calculated-fields-form')?> <a href="https://cff-bundles.dwbooster.com" target="_blank" style="font-weight:bold;"><?php _e('Marketplace', 'calculated-fields-form'); ?></a></div>
218
  <div class="cff-bundles-plugin"></div>
219
- <script src="https://cff-bundles.dwbooster.com/plugins/plugins.js"></script>
220
  </div>
221
  <div id="metabox_basic_settings" class="postbox" >
222
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Troubleshoot Area & General Settings', 'calculated-fields-form' ); ?></span></h3>
@@ -232,14 +232,14 @@ if ($message) echo "<div id='setting-error-settings_updated' class='updated sett
232
  <div style="border:1px solid #DADADA; padding:10px;">
233
  <p><?php _e( '<strong>Important!</strong>: Use this area <strong>only</strong> if you are experiencing conflicts with third party plugins, with the theme scripts or with the character encoding.', 'calculated-fields-form' ); ?></p>
234
  <?php _e( 'Script load method', 'calculated-fields-form' ); ?>:<br />
235
- <select id="ccscriptload" name="ccscriptload">
236
  <option value="0" <?php if (get_option('CP_CFF_LOAD_SCRIPTS',"0") == "1") echo 'selected'; ?>><?php _e( 'Classic (Recommended)', 'calculated-fields-form' ); ?></option>
237
  <option value="1" <?php if (get_option('CP_CFF_LOAD_SCRIPTS',"0") != "1") echo 'selected'; ?>><?php _e( 'Direct', 'calculated-fields-form' ); ?></option>
238
  </select><br />
239
  <em><?php _e( '* Change the script load method if the form doesn\'t appear in the public website.', 'calculated-fields-form' ); ?></em>
240
  <br /><br />
241
  <?php _e( 'Character encoding', 'calculated-fields-form' ); ?>:<br />
242
- <select id="cccharsets" name="cccharsets">
243
  <option value=""><?php _e( 'Keep current charset (Recommended)', 'calculated-fields-form' ); ?></option>
244
  <option value="utf8_general_ci">UTF-8 (<?php _e( 'try this first', 'calculated-fields-form' ); ?>)</option>
245
  <option value="utf8mb4_general_ci">UTF-8mb4 (<?php _e( 'Only from MySQL 5.5', 'calculated-fields-form' ); ?>)</option>
@@ -251,15 +251,16 @@ if ($message) echo "<div id='setting-error-settings_updated' class='updated sett
251
  <input type="checkbox" id="ccoptimizationplugin" name="ccoptimizationplugin" value="1" <?php echo ( get_option( 'CP_CALCULATEDFIELDSF_OPTIMIZATION_PLUGIN', CP_CALCULATEDFIELDSF_OPTIMIZATION_PLUGIN ) ) ? 'CHECKED' : ''; ?> /><em><?php _e('* Tick the checkbox if there is an optimization plugin active on the website, and the forms are not visible.', 'calculated-fields-form'); ?></em>
252
  </div>
253
  <br />
254
- <?php _e( 'Activate Javascript Cache', 'calculated-fields-form' ); ?>: <input type="checkbox" name="ccjscache" id="ccjscache" <?php echo ( get_option( 'CP_CALCULATEDFIELDSF_USE_CACHE', CP_CALCULATEDFIELDSF_USE_CACHE ) ) ? 'CHECKED' : ''; ?> />
255
  <br /><br />
256
- <?php _e( 'Allows to access the forms directly', 'calculated-fields-form' ); ?>: <input type="checkbox" name="ccdirectform" id="ccdirectform" <?php echo ( get_option( 'CP_CALCULATEDFIELDSF_DIRECT_FORM_ACCESS', CP_CALCULATEDFIELDSF_DIRECT_FORM_ACCESS ) ) ? 'CHECKED' : ''; ?> />
257
  <br /><br />
258
- <?php _e( 'Allows to access the forms from amp pages', 'calculated-fields-form' ); ?>: <input type="checkbox" name="ccampform" id="ccampform" <?php echo ( get_option( 'CP_CALCULATEDFIELDSF_AMP', CP_CALCULATEDFIELDSF_AMP ) ) ? 'CHECKED' : ''; ?> />
259
  <br /><br />
260
- <?php _e( 'Do not load the forms with crawlers', 'calculated-fields-form' ); ?>: <input type="checkbox" name="ccexcludecrawler" id="ccexcludecrawler" <?php echo ( get_option( 'CP_CALCULATEDFIELDSF_EXCLUDE_CRAWLERS', false ) ) ? 'CHECKED' : ''; ?> /><br /><i><?php _e( '* The forms are not loaded when website is being indexed by searchers.', 'calculated-fields-form' ); ?></i>
 
261
  <br /><br />
262
- <input type="button" onclick="cp_updateConfig();" name="gobtn" value="<?php esc_attr_e( 'UPDATE', 'calculated-fields-form' ); ?>" />
263
  <br />
264
  </form>
265
 
186
  <td nowrap><input type="text" name="calname_<?php echo $item->id; ?>" id="calname_<?php echo $item->id; ?>" value="<?php echo esc_attr($item->form_name); ?>" /></td>
187
 
188
  <td nowrap>
189
+ <input type="button" name="calupdate_<?php echo $item->id; ?>" value="<?php esc_attr_e( 'Update', 'calculated-fields-form' ); ?>" onclick="cp_updateItem(<?php echo $item->id; ?>);" class="button-secondary" />
190
+ <input type="button" name="calmanage_<?php echo $item->id; ?>" value="<?php esc_attr_e( 'Settings', 'calculated-fields-form' ); ?>" onclick="cp_manageSettings(<?php echo $item->id; ?>);" class="button-primary" />
191
+ <input type="button" name="calmanage_<?php echo $item->id; ?>" value="<?php esc_attr_e( 'Messages', 'calculated-fields-form' ); ?>" onclick="cp_viewMessages(<?php echo $item->id; ?>);" class="button-secondary" />
192
+ <input type="button" name="calclone_<?php echo $item->id; ?>" value="<?php esc_attr_e( 'Clone', 'calculated-fields-form' ); ?>" onclick="cp_cloneItem(<?php echo $item->id; ?>);" class="button-secondary" />
193
+ <input type="button" name="caldelete_<?php echo $item->id; ?>" value="<?php esc_attr_e( 'Delete', 'calculated-fields-form' ); ?>" onclick="cp_deleteItem(<?php echo $item->id; ?>);" class="button-secondary" />
194
  </td>
195
  <td nowrap>[CP_CALCULATED_FIELDS id="<?php echo $item->id; ?>"]</td>
196
  </tr>
208
 
209
  <form name="additem">
210
  <?php _e( 'Item Name', 'calculated-fields-form' ); ?>:<br />
211
+ <input type="text" name="cp_itemname" id="cp_itemname" value="" onkeyup="cp_addItem_keyup( event );" class="width50" /> <input type="button" onclick="cp_addItem();" name="gobtn" value="<?php esc_attr_e( 'Add', 'calculated-fields-form' ); ?>" class="button-secondary" />
212
  <br /><br />
213
  </form>
214
  </div>
216
  <div style="border:1px solid #F0AD4E;background:#FBE6CA;padding:10px;margin:10px 0;font-size:1.3em;">
217
  <div><?php _e('For additional resources visit the plugin\'s', 'calculated-fields-form')?> <a href="https://cff-bundles.dwbooster.com" target="_blank" style="font-weight:bold;"><?php _e('Marketplace', 'calculated-fields-form'); ?></a></div>
218
  <div class="cff-bundles-plugin"></div>
219
+ <script src="https://cff-bundles.dwbooster.com/plugins/plugins.js?v=<?php print CP_CALCULATEDFIELDSF_VERSION; ?>"></script>
220
  </div>
221
  <div id="metabox_basic_settings" class="postbox" >
222
  <h3 class='hndle' style="padding:5px;"><span><?php _e( 'Troubleshoot Area & General Settings', 'calculated-fields-form' ); ?></span></h3>
232
  <div style="border:1px solid #DADADA; padding:10px;">
233
  <p><?php _e( '<strong>Important!</strong>: Use this area <strong>only</strong> if you are experiencing conflicts with third party plugins, with the theme scripts or with the character encoding.', 'calculated-fields-form' ); ?></p>
234
  <?php _e( 'Script load method', 'calculated-fields-form' ); ?>:<br />
235
+ <select id="ccscriptload" name="ccscriptload" class="width50">
236
  <option value="0" <?php if (get_option('CP_CFF_LOAD_SCRIPTS',"0") == "1") echo 'selected'; ?>><?php _e( 'Classic (Recommended)', 'calculated-fields-form' ); ?></option>
237
  <option value="1" <?php if (get_option('CP_CFF_LOAD_SCRIPTS',"0") != "1") echo 'selected'; ?>><?php _e( 'Direct', 'calculated-fields-form' ); ?></option>
238
  </select><br />
239
  <em><?php _e( '* Change the script load method if the form doesn\'t appear in the public website.', 'calculated-fields-form' ); ?></em>
240
  <br /><br />
241
  <?php _e( 'Character encoding', 'calculated-fields-form' ); ?>:<br />
242
+ <select id="cccharsets" name="cccharsets" class="width50">
243
  <option value=""><?php _e( 'Keep current charset (Recommended)', 'calculated-fields-form' ); ?></option>
244
  <option value="utf8_general_ci">UTF-8 (<?php _e( 'try this first', 'calculated-fields-form' ); ?>)</option>
245
  <option value="utf8mb4_general_ci">UTF-8mb4 (<?php _e( 'Only from MySQL 5.5', 'calculated-fields-form' ); ?>)</option>
251
  <input type="checkbox" id="ccoptimizationplugin" name="ccoptimizationplugin" value="1" <?php echo ( get_option( 'CP_CALCULATEDFIELDSF_OPTIMIZATION_PLUGIN', CP_CALCULATEDFIELDSF_OPTIMIZATION_PLUGIN ) ) ? 'CHECKED' : ''; ?> /><em><?php _e('* Tick the checkbox if there is an optimization plugin active on the website, and the forms are not visible.', 'calculated-fields-form'); ?></em>
252
  </div>
253
  <br />
254
+ <input type="checkbox" name="ccjscache" id="ccjscache" <?php echo ( get_option( 'CP_CALCULATEDFIELDSF_USE_CACHE', CP_CALCULATEDFIELDSF_USE_CACHE ) ) ? 'CHECKED' : ''; ?> /> <?php _e( 'Activate Javascript Cache', 'calculated-fields-form' ); ?>
255
  <br /><br />
256
+ <input type="checkbox" name="ccdirectform" id="ccdirectform" <?php echo ( get_option( 'CP_CALCULATEDFIELDSF_DIRECT_FORM_ACCESS', CP_CALCULATEDFIELDSF_DIRECT_FORM_ACCESS ) ) ? 'CHECKED' : ''; ?> /> <?php _e( 'Allows to access the forms directly', 'calculated-fields-form' ); ?>
257
  <br /><br />
258
+ <input type="checkbox" name="ccampform" id="ccampform" <?php echo ( get_option( 'CP_CALCULATEDFIELDSF_AMP', CP_CALCULATEDFIELDSF_AMP ) ) ? 'CHECKED' : ''; ?> /> <?php _e( 'Allows to access the forms from amp pages', 'calculated-fields-form' ); ?>
259
  <br /><br />
260
+ <input type="checkbox" name="ccexcludecrawler" id="ccexcludecrawler" <?php echo ( get_option( 'CP_CALCULATEDFIELDSF_EXCLUDE_CRAWLERS', false ) ) ? 'CHECKED' : ''; ?> /> <?php _e( 'Do not load the forms with crawlers', 'calculated-fields-form' ); ?>
261
+ <br /><i><?php _e( '* The forms are not loaded when website is being indexed by searchers.', 'calculated-fields-form' ); ?></i>
262
  <br /><br />
263
+ <input type="button" onclick="cp_updateConfig();" name="gobtn" value="<?php esc_attr_e( 'UPDATE', 'calculated-fields-form' ); ?>" class="button-secondary" />
264
  <br />
265
  </form>
266
 
inc/cpcff_amp.inc.php CHANGED
@@ -80,10 +80,12 @@ if(!class_exists('CPCFF_AMP'))
80
  if(!empty($_GET['cff-editor-preview']))
81
  {
82
  $message .= '<script type="text/javascript">
83
- fbuilderjQuery(window).on( "load", function(){
84
- var frameEl = window.frameElement;
85
- if(frameEl) frameEl.height = fbuilderjQuery("form").outerHeight(true) + 25;
86
- });
 
 
87
  </script>';
88
  }
89
  print '</head>'.
80
  if(!empty($_GET['cff-editor-preview']))
81
  {
82
  $message .= '<script type="text/javascript">
83
+ window.addEventListener("load",
84
+ function() {
85
+ var frameEl = window.frameElement;
86
+ if(frameEl && typeof fbuilderjQuery != "undefined")
87
+ frameEl.height = fbuilderjQuery("form").outerHeight(true) + 25;
88
+ }, false);
89
  </script>';
90
  }
91
  print '</head>'.
inc/cpcff_auxiliary.inc.php CHANGED
@@ -100,6 +100,14 @@ if(!class_exists('CPCFF_AUXILIARY'))
100
  return rtrim(self::$_wp_url, '/');
101
  } // End wp_url
102
 
 
 
 
 
 
 
 
 
103
  /**
104
  * Returns the URL to the current post url.
105
  *
100
  return rtrim(self::$_wp_url, '/');
101
  } // End wp_url
102
 
103
+ /**
104
+ * Returns the form editor.
105
+ */
106
+ public static function editor_url()
107
+ {
108
+ return self::wp_url().'/admin.php?page=cp_calculated_fields_form&_cpcff_nonce='.wp_create_nonce('cff-form-settings').'&cal=';
109
+ } // End editor_url
110
+
111
  /**
112
  * Returns the URL to the current post url.
113
  *
inc/cpcff_install_uninstall.inc.php CHANGED
@@ -255,7 +255,7 @@ if(!class_exists('CPCFF_INSTALLER'))
255
  'paypal_recurrent_setup' => '',
256
  'paypal_recurrent_setup_days' => '15',
257
  'paypal_recurrent_times' => '0',
258
- 'paypal_recurrent_times_field' => '0',
259
  'paypal_identify_prices' => CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_IDENTIFY_PRICES,
260
  'paypal_zero_payment' => CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_ZERO_PAYMENT,
261
 
255
  'paypal_recurrent_setup' => '',
256
  'paypal_recurrent_setup_days' => '15',
257
  'paypal_recurrent_times' => '0',
258
+ 'paypal_recurrent_times_field' => '',
259
  'paypal_identify_prices' => CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_IDENTIFY_PRICES,
260
  'paypal_zero_payment' => CP_CALCULATEDFIELDSF_DEFAULT_PAYPAL_ZERO_PAYMENT,
261
 
inc/cpcff_main.inc.php CHANGED
@@ -184,7 +184,7 @@ if(!class_exists('CPCFF_MAIN'))
184
  add_action( 'admin_enqueue_scripts', array( $this, 'admin_resources' ), 1 );
185
  }
186
  $this->_define_shortcodes();
187
- add_action('wp_enqueue_scripts', array($this, 'enqueue_public_style') );
188
  } // End init
189
 
190
  /**
@@ -415,13 +415,13 @@ if(!class_exists('CPCFF_MAIN'))
415
  }
416
  } // End form_preview
417
 
418
- public function enqueue_public_style()
419
  {
420
  global $post;
421
 
422
  if(!empty($post) && has_shortcode($post->post_content, 'CP_CALCULATED_FIELDS'))
423
- wp_enqueue_style( 'cpcff_stylepublic', plugins_url('/css/stylepublic.css', CP_CALCULATEDFIELDSF_MAIN_FILE_PATH), array(), CP_CALCULATEDFIELDSF_VERSION );
424
- } // End enqueue_public_style
425
 
426
  /**
427
  * Returns the public version of the form wih its resources.
184
  add_action( 'admin_enqueue_scripts', array( $this, 'admin_resources' ), 1 );
185
  }
186
  $this->_define_shortcodes();
187
+ add_action('wp_enqueue_scripts', array($this, 'enqueue_loader') );
188
  } // End init
189
 
190
  /**
415
  }
416
  } // End form_preview
417
 
418
+ public function enqueue_loader()
419
  {
420
  global $post;
421
 
422
  if(!empty($post) && has_shortcode($post->post_content, 'CP_CALCULATED_FIELDS'))
423
+ wp_enqueue_style( 'cpcff_loader', plugins_url('/css/loader.css', CP_CALCULATEDFIELDSF_MAIN_FILE_PATH), array(), CP_CALCULATEDFIELDSF_VERSION );
424
+ } // End enqueue_loader
425
 
426
  /**
427
  * Returns the public version of the form wih its resources.
inc/cpcff_page_builders.inc.php CHANGED
@@ -90,11 +90,14 @@ if(!class_exists('CPCFF_PAGE_BUILDERS'))
90
  $url .= ((strpos($url, '?') === false) ? '?' : '&').'cff-editor-preview=1&cff-amp-redirected=1&cff-amp-form=';
91
  $config = array(
92
  'url' => $url,
 
 
93
  'forms' => array(),
94
  'labels' => array(
95
  'required_form' => __('Select a form', 'calculated-fields-form'),
96
  'forms' => __('Forms', 'calculated-fields-form'),
97
- 'attributes' => __('Additional attributes', 'calculated-fields-form')
 
98
  )
99
  );
100
 
@@ -137,7 +140,20 @@ if(!class_exists('CPCFF_PAGE_BUILDERS'))
137
  public function elementor_editor()
138
  {
139
  if(is_admin())
 
 
140
  wp_enqueue_style('cp_calculatedfieldsf_elementor_editor_css', plugins_url('/pagebuilders/elementor/assets/elementor.css', CP_CALCULATEDFIELDSF_MAIN_FILE_PATH));
 
 
 
 
 
 
 
 
 
 
 
141
  require_once CP_CALCULATEDFIELDSF_BASE_PATH.'/pagebuilders/elementor/elementor.pb.php';
142
  } // End elementor_editor
143
 
90
  $url .= ((strpos($url, '?') === false) ? '?' : '&').'cff-editor-preview=1&cff-amp-redirected=1&cff-amp-form=';
91
  $config = array(
92
  'url' => $url,
93
+ 'is_admin' => current_user_can( 'manage_options' ),
94
+ 'editor' => CPCFF_AUXILIARY::editor_url(),
95
  'forms' => array(),
96
  'labels' => array(
97
  'required_form' => __('Select a form', 'calculated-fields-form'),
98
  'forms' => __('Forms', 'calculated-fields-form'),
99
+ 'attributes' => __('Additional attributes', 'calculated-fields-form'),
100
+ 'edit_form' => __('Edit form', 'calculated-fields-form')
101
  )
102
  );
103
 
140
  public function elementor_editor()
141
  {
142
  if(is_admin())
143
+ {
144
+ wp_enqueue_script('cp_calculatedfieldsf_elementor_editor_js', plugins_url('/pagebuilders/elementor/assets/elementor.js', CP_CALCULATEDFIELDSF_MAIN_FILE_PATH));
145
  wp_enqueue_style('cp_calculatedfieldsf_elementor_editor_css', plugins_url('/pagebuilders/elementor/assets/elementor.css', CP_CALCULATEDFIELDSF_MAIN_FILE_PATH));
146
+
147
+ if ( current_user_can( 'manage_options' ) ) {
148
+ wp_localize_script(
149
+ 'cp_calculatedfieldsf_elementor_editor_js',
150
+ 'cp_calculatedfieldsf_elementor',
151
+ array(
152
+ 'url' => CPCFF_AUXILIARY::editor_url()
153
+ )
154
+ );
155
+ }
156
+ }
157
  require_once CP_CALCULATEDFIELDSF_BASE_PATH.'/pagebuilders/elementor/elementor.pb.php';
158
  } // End elementor_editor
159
 
inc/cpcff_session.inc.php CHANGED
@@ -30,7 +30,7 @@ if( !class_exists( 'CP_SESSION' ) )
30
  private function __construct()
31
  {
32
  if(!is_admin()) return;
33
- if(session_id() == "" ) @session_start();
34
 
35
  if( isset( $_SESSION[CP_COOKIE_NAME] ) || isset( $_COOKIE[CP_COOKIE_NAME] ) )
36
  {
30
  private function __construct()
31
  {
32
  if(!is_admin()) return;
33
+ if(session_id() == "" && !headers_sent()) @session_start();
34
 
35
  if( isset( $_SESSION[CP_COOKIE_NAME] ) || isset( $_COOKIE[CP_COOKIE_NAME] ) )
36
  {
js/fbuilder-pro-admin.jquery.js CHANGED
@@ -68,7 +68,7 @@
68
  $( '.form-builder-error-messages' ).html( '<div class="error-text">' + str + '</div>' );
69
  };
70
 
71
- // fbuilder plugin
72
  $.fn.fbuilder = function(){
73
  var typeList = $.fbuilder.typeList,
74
  categoryList = $.fbuilder.categoryList;
@@ -583,7 +583,7 @@
583
  template += '<option value="'+$.fbuilder.showSettings.formTemplateDic[i].prefix+'" ' + selected + '>'+$.fbuilder.showSettings.formTemplateDic[i].title+'</option>';
584
  }
585
 
586
- str += '<div><label>Form Name</label><input class="large" name="fTitle" id="fTitle" value="'+$.fbuilder.htmlEncode(this.title)+'" /></div><div><label>Description</label><textarea class="large" name="fDescription" id="fDescription">'+this.description+'</textarea></div><div><label>Label Placement</label><select name="fLayout" id="fLayout" class="large">'+layout+'</select></div><div><label><input type="checkbox" name="fLoadingAnimation" id="fLoadingAnimation" '+( ( this.loading_animation ) ? 'CHECKED' : '' )+' /> Display loading form animation</label></div><div><label><input type="checkbox" name="fAutocomplete" id="fAutocomplete" '+( ( this.autocomplete ) ? 'CHECKED' : '' )+' /> Enable autocompletion</label></div><div><label><input type="checkbox" name="fPersistence" id="fPersistence" '+( ( this.persistence ) ? 'CHECKED' : '' )+' /> Enable the browser\'s persistence (the data are stored locally on browser)</label></div>';
587
 
588
  if(typeof $.fbuilder.controls[ 'fCalculated' ] != 'undefined')
589
  {
@@ -839,7 +839,7 @@
839
  },
840
  showName: function( v )
841
  {
842
- return '<div><label>Field name, tag for the message:</label><input readonly="readonly" class="large" name="sNametag" id="sNametag" value="&lt;%'+v+'%&gt;" />'+
843
  '<input style="display:none" readonly="readonly" class="large" name="sName" id="sName" value="'+v+'" /></div>';
844
  },
845
  showPredefined: function(v,c)
@@ -850,6 +850,17 @@
850
  {
851
  return '<div><label>Equal to [<a class="helpfbuilder" text="Use this field to create password confirmation field or email confirmation fields.\n\nSpecify this setting ONLY into the confirmation field, not in the original field.">help?</a>]</label><select class="equalTo" name="sEqualTo" id="sEqualTo" dvalue="'+v+'" dname="'+name+'"></select></div>';
852
  },
 
 
 
 
 
 
 
 
 
 
 
853
  showRequired: function(v)
854
  {
855
  return '<label><input type="checkbox" name="sRequired" id="sRequired" '+((v)?"checked":"")+'>Required</label>';
@@ -943,6 +954,12 @@
943
  $.fbuilder.reloadItems( {'field': e.data.obj} );
944
  });
945
 
 
 
 
 
 
 
946
  $("#sPredefined").bind("keyup", {obj: this}, function(e)
947
  {
948
  e.data.obj.predefined = $(this).val();
@@ -1036,6 +1053,7 @@
1036
  showRequired:function()
1037
  {
1038
  var result = '';
 
1039
  if(typeof this.required != 'undefined') result += $.fbuilder.showSettings.showRequired(this.required);
1040
  if(typeof this.exclude != 'undefined') result += $.fbuilder.showSettings.showExclude(this.exclude);
1041
  if(typeof this.readonly != 'undefined') result += $.fbuilder.showSettings.showReadonly(this.readonly);
68
  $( '.form-builder-error-messages' ).html( '<div class="error-text">' + str + '</div>' );
69
  };
70
 
71
+ // fbuilder plugin
72
  $.fn.fbuilder = function(){
73
  var typeList = $.fbuilder.typeList,
74
  categoryList = $.fbuilder.categoryList;
583
  template += '<option value="'+$.fbuilder.showSettings.formTemplateDic[i].prefix+'" ' + selected + '>'+$.fbuilder.showSettings.formTemplateDic[i].title+'</option>';
584
  }
585
 
586
+ str += '<div><label>Form Name</label><input type="text" class="large" name="fTitle" id="fTitle" value="'+$.fbuilder.htmlEncode(this.title)+'" /></div><div><label>Description</label><textarea class="large" name="fDescription" id="fDescription">'+this.description+'</textarea></div><div><label>Label Placement</label><select name="fLayout" id="fLayout" class="large">'+layout+'</select></div><div><label><input type="checkbox" name="fLoadingAnimation" id="fLoadingAnimation" '+( ( this.loading_animation ) ? 'CHECKED' : '' )+' /> Display loading form animation</label></div><div><label><input type="checkbox" name="fAutocomplete" id="fAutocomplete" '+( ( this.autocomplete ) ? 'CHECKED' : '' )+' /> Enable autocompletion</label></div><div><label><input type="checkbox" name="fPersistence" id="fPersistence" '+( ( this.persistence ) ? 'CHECKED' : '' )+' /> Enable the browser\'s persistence (the data are stored locally on browser)</label></div>';
587
 
588
  if(typeof $.fbuilder.controls[ 'fCalculated' ] != 'undefined')
589
  {
839
  },
840
  showName: function( v )
841
  {
842
+ return '<div><label>Field name, tag for the message:</label><input type="text" readonly="readonly" class="large" name="sNametag" id="sNametag" value="&lt;%'+v+'%&gt;" />'+
843
  '<input style="display:none" readonly="readonly" class="large" name="sName" id="sName" value="'+v+'" /></div>';
844
  },
845
  showPredefined: function(v,c)
850
  {
851
  return '<div><label>Equal to [<a class="helpfbuilder" text="Use this field to create password confirmation field or email confirmation fields.\n\nSpecify this setting ONLY into the confirmation field, not in the original field.">help?</a>]</label><select class="equalTo" name="sEqualTo" id="sEqualTo" dvalue="'+v+'" dname="'+name+'"></select></div>';
852
  },
853
+ showAutocomplete: function(v)
854
+ {
855
+ var options = '', values = ['off', 'on', 'name', 'honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix', 'nickname', 'email', 'username', 'new-password', 'current-password', 'one-time-code', 'organization-title', 'organization', 'street-address', 'address-line1', 'address-line2', 'address-line3', 'address-level4', 'address-level3', 'address-level2', 'address-level1', 'country', 'country-name', 'postal-code', 'cc-name', 'cc-given-name', 'cc-additional-name', 'cc-family-name', 'cc-number', 'cc-exp', 'cc-exp-month', 'cc-exp-year', 'cc-csc', 'cc-type', 'transaction-currency', 'transaction-amount', 'language', 'bday', 'bday-day', 'bday-month', 'bday-year', 'sex', 'tel', 'tel-country-code', 'tel-national', 'tel-area-code', 'tel-local', 'tel-extension', 'impp', 'url', 'photo'];
856
+
857
+ for(var i = 0, h = values.length; i<h; i++)
858
+ {
859
+ options += '<option value="'+values[i]+'" '+(values[i] == this.autocomplete ? 'SELECTED' : '')+'>'+values[i]+'</option>';
860
+ }
861
+ return '<div><label>Autocomplete</label>'+
862
+ '<select class="large" name="sAutocomplete" id="sAutocomplete">'+options+'</select><br><i>The field attribute takes precedence over the form settings.</i></div>';
863
+ },
864
  showRequired: function(v)
865
  {
866
  return '<label><input type="checkbox" name="sRequired" id="sRequired" '+((v)?"checked":"")+'>Required</label>';
954
  $.fbuilder.reloadItems( {'field': e.data.obj} );
955
  });
956
 
957
+ $("#sAutocomplete").bind("change", {obj: this}, function(e)
958
+ {
959
+ e.data.obj.autocomplete = $(this).val();
960
+ $.fbuilder.reloadItems( {'field': e.data.obj} );
961
+ });
962
+
963
  $("#sPredefined").bind("keyup", {obj: this}, function(e)
964
  {
965
  e.data.obj.predefined = $(this).val();
1053
  showRequired:function()
1054
  {
1055
  var result = '';
1056
+ if(typeof this.autocomplete != 'undefined') result += $.fbuilder.showSettings.showAutocomplete(this.autocomplete);
1057
  if(typeof this.required != 'undefined') result += $.fbuilder.showSettings.showRequired(this.required);
1058
  if(typeof this.exclude != 'undefined') result += $.fbuilder.showSettings.showExclude(this.exclude);
1059
  if(typeof this.readonly != 'undefined') result += $.fbuilder.showSettings.showReadonly(this.readonly);
js/fbuilder-pro-public.jquery.js CHANGED
@@ -152,6 +152,7 @@
152
  {
153
  formDom.validate().focusInvalid();
154
  }
 
155
  return i;
156
  }
157
  }; // End goToPage
@@ -279,6 +280,7 @@
279
  reloadItemsPublic = function()
280
  {
281
  var form_tag = $("#cp_calculatedfieldsf_pform"+opt.identifier),
 
282
  fieldlist_tag = $("#fieldlist"+opt.identifier),
283
  page_tag,
284
  i = 0,
@@ -308,9 +310,8 @@
308
  if( !opt.cached )
309
  {
310
  page_tag = $('<div class="pb'+page+' pbreak" page="'+page+'"></div>');
311
- fieldlist_tag.addClass(theForm.formlayout)
312
- .html(theForm.show())
313
- .append(page_tag);
314
 
315
  for(i; i<items.length; i++)
316
  {
@@ -493,7 +494,7 @@
493
  .attr( 'autocomplete', ( ( this.autocomplete ) ? 'on' : 'off' ) )
494
  .find( 'input,select' )
495
  .blur( function(){ try{ $(this).valid(); }catch(e){};} );
496
- if(!this.autocomplete) form.find('input[name*="fieldname"]').attr('autocomplete', 'new-password');
497
  }
498
  });
499
 
152
  {
153
  formDom.validate().focusInvalid();
154
  }
155
+ $(document).trigger('cff-gotopage', {'from': _from, 'to': i, 'form': formDom});
156
  return i;
157
  }
158
  }; // End goToPage
280
  reloadItemsPublic = function()
281
  {
282
  var form_tag = $("#cp_calculatedfieldsf_pform"+opt.identifier),
283
+ header_tag = $("#formheader"+opt.identifier),
284
  fieldlist_tag = $("#fieldlist"+opt.identifier),
285
  page_tag,
286
  i = 0,
310
  if( !opt.cached )
311
  {
312
  page_tag = $('<div class="pb'+page+' pbreak" page="'+page+'"></div>');
313
+ header_tag.html(theForm.show());
314
+ fieldlist_tag.addClass(theForm.formlayout).append(page_tag);
 
315
 
316
  for(i; i<items.length; i++)
317
  {
494
  .attr( 'autocomplete', ( ( this.autocomplete ) ? 'on' : 'off' ) )
495
  .find( 'input,select' )
496
  .blur( function(){ try{ $(this).valid(); }catch(e){};} );
497
+ if(!this.autocomplete) form.find('input[name*="fieldname"]:not([autocomplete])').attr('autocomplete', 'new-password');
498
  }
499
  });
500
 
js/fields-admin/01_fbuilder.ftext.js CHANGED
@@ -12,6 +12,7 @@
12
  {
13
  title:"Untitled",
14
  ftype:"ftext",
 
15
  predefined:"",
16
  predefinedClick:false,
17
  required:false,
12
  {
13
  title:"Untitled",
14
  ftype:"ftext",
15
+ autocomplete:"off",
16
  predefined:"",
17
  predefinedClick:false,
18
  required:false,
js/fields-admin/02_fbuilder.fnumber.js CHANGED
@@ -36,6 +36,7 @@
36
  {s:"#sFormat",e:"change", l:"dformat", f:function(el){
37
  var v = el.val();
38
  $( '.fnumber-symbols' )[(v == 'digits')?'hide':'show']();
 
39
  return v;
40
  }
41
  },
@@ -49,13 +50,14 @@
49
  },
50
  showFormatIntance: function()
51
  {
52
- var str = "";
53
  for (var i=0;i<this.formats.length;i++)
54
  {
55
-
56
- str += '<option value="'+this.formats[i]+'" '+((this.formats[i]==this.dformat)?"selected":"")+'>'+this.formats[i]+'</option>';
57
  }
58
- return '<div><label>Number Format</label><select name="sFormat" id="sFormat">'+str+'</select></div><div class="fnumber-symbols" '+( (this.dformat == 'digits') ? 'style="display:none;"' : '' )+'><label>Decimals separator symbol (Ex: 25.20)</label><input type="text" name="sDecimalSymbol" id="sDecimalSymbol" class="large" value="'+$.fbuilder.htmlEncode(this.decimalSymbol)+'" /><label>Symbol for grouping thousands (Ex: 3,000,000)</label><input type="text" name="sThousandSeparator" id="sThousandSeparator" class="large" value="'+$.fbuilder.htmlEncode(this.thousandSeparator)+'" /><label><input type="checkbox" name="sFormatDynamically" id="sFormatDynamically" '+( (this.formatDynamically) ? 'CHECKED' : '')+'> Format Dynamically</label></div>';
 
 
59
  },
60
  showRangeIntance: function()
61
  {
36
  {s:"#sFormat",e:"change", l:"dformat", f:function(el){
37
  var v = el.val();
38
  $( '.fnumber-symbols' )[(v == 'digits')?'hide':'show']();
39
+ $( '.fnumber-hint' )[(v == 'percent')?'show':'hide']();
40
  return v;
41
  }
42
  },
50
  },
51
  showFormatIntance: function()
52
  {
53
+ var str = "", df = this.dformat;
54
  for (var i=0;i<this.formats.length;i++)
55
  {
56
+ str += '<option value="'+this.formats[i]+'" '+((this.formats[i]==df)?"selected":"")+'>'+this.formats[i]+'</option>';
 
57
  }
58
+ return '<div><label>Number Format</label><select name="sFormat" id="sFormat">'+str+'</select></div>'+
59
+ '<div class="fnumber-hint" '+((df != 'percent') ? 'style="display:none;"' : '')+'><i>The field value in the equations would be its decimal representation. Ex. 10% would be 0.1</i></div>'+
60
+ '<div class="fnumber-symbols" '+((df == 'digits') ? 'style="display:none;"' : '')+'><label>Decimals separator symbol (Ex: 25.20)</label><input type="text" name="sDecimalSymbol" id="sDecimalSymbol" class="large" value="'+$.fbuilder.htmlEncode(this.decimalSymbol)+'" /><label>Symbol for grouping thousands (Ex: 3,000,000)</label><input type="text" name="sThousandSeparator" id="sThousandSeparator" class="large" value="'+$.fbuilder.htmlEncode(this.thousandSeparator)+'" /><label><input type="checkbox" name="sFormatDynamically" id="sFormatDynamically" '+( (this.formatDynamically) ? 'CHECKED' : '')+'> Format Dynamically</label></div>';
61
  },
62
  showRangeIntance: function()
63
  {
js/fields-admin/03_fbuilder.fcolor.js ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ $.fbuilder.typeList.push(
2
+ {
3
+ id:"fcolor",
4
+ name:"Color",
5
+ control_category:1
6
+ }
7
+ );
8
+ $.fbuilder.controls[ 'fcolor' ]=function(){};
9
+ $.extend(
10
+ $.fbuilder.controls[ 'fcolor' ].prototype,
11
+ $.fbuilder.controls[ 'ffields' ].prototype,
12
+ {
13
+ title:"Untitled",
14
+ ftype:"fcolor",
15
+ predefined:"",
16
+ predefinedClick:false,
17
+ required:false,
18
+ exclude:false,
19
+ readonly:false,
20
+ size:"default",
21
+ display:function()
22
+ {
23
+ return '<div class="fields '+this.name+' '+this.ftype+'" id="field'+this.form_identifier+'-'+this.index+'" title="'+this.name+'"><div class="arrow ui-icon ui-icon-play "></div><div title="Delete" class="remove ui-icon ui-icon-trash "></div><div title="Duplicate" class="copy ui-icon ui-icon-copy "></div><label>'+this.title+''+((this.required)?"*":"")+'</label><div class="dfield"><input class="field disabled '+this.size+'" type="color" value="'+$.fbuilder.htmlEncode(this.predefined)+'"/><span class="uh">'+this.userhelp+'</span></div><div class="clearer" /></div>';
24
+ },
25
+ editItemEvents:function()
26
+ {
27
+ var me = this, evt = [{s:"#sSize",e:"change", l:"size"}];
28
+ $.fbuilder.controls[ 'ffields' ].prototype.editItemEvents.call(this,evt);
29
+ },
30
+ showSize:function()
31
+ {
32
+ var bk = $.fbuilder.showSettings.sizeList.slice();
33
+ $.fbuilder.showSettings.sizeList.unshift({id:"default",name:"Default"});
34
+ var output = $.fbuilder.showSettings.showSize(this.size);
35
+ $.fbuilder.showSettings.sizeList = bk;
36
+ return output;
37
+ }
38
+ });
js/fields-admin/03_fbuilder.femail.js CHANGED
@@ -12,6 +12,7 @@
12
  {
13
  title:"Email",
14
  ftype:"femail",
 
15
  predefined:"",
16
  predefinedClick:false,
17
  required:false,
12
  {
13
  title:"Email",
14
  ftype:"femail",
15
+ autocomplete:"off",
16
  predefined:"",
17
  predefinedClick:false,
18
  required:false,
js/fields-admin/04_fbuilder.fdate.js CHANGED
@@ -17,6 +17,7 @@
17
  size:"medium",
18
  required:false,
19
  exclude:false,
 
20
  dformat:"mm/dd/yyyy",
21
  dseparator:"/",
22
  tformat:"24",
17
  size:"medium",
18
  required:false,
19
  exclude:false,
20
+ readonly:false,
21
  dformat:"mm/dd/yyyy",
22
  dseparator:"/",
23
  tformat:"24",
js/fields-admin/05_fbuilder.ftextarea.js CHANGED
@@ -12,6 +12,7 @@
12
  {
13
  title:"Untitled",
14
  ftype:"ftextarea",
 
15
  predefined:"",
16
  predefinedClick:false,
17
  required:false,
12
  {
13
  title:"Untitled",
14
  ftype:"ftextarea",
15
+ autocomplete:"off",
16
  predefined:"",
17
  predefinedClick:false,
18
  required:false,
js/fields-admin/06_fbuilder.fcheck.js CHANGED
@@ -15,6 +15,7 @@
15
  layout:"one_column",
16
  required:false,
17
  exclude:false,
 
18
  toSubmit:'text',
19
  merge:1,
20
  max:-1,
15
  layout:"one_column",
16
  required:false,
17
  exclude:false,
18
+ readonly:false,
19
  toSubmit:'text',
20
  merge:1,
21
  max:-1,
js/fields-admin/07_fbuilder.fradio.js CHANGED
@@ -15,6 +15,7 @@
15
  layout:"one_column",
16
  required:false,
17
  exclude:false,
 
18
  toSubmit:'text',
19
  choiceSelected:"",
20
  showDep:false,
15
  layout:"one_column",
16
  required:false,
17
  exclude:false,
18
+ readonly:false,
19
  toSubmit:'text',
20
  choiceSelected:"",
21
  showDep:false,
js/fields-admin/15_fbuilder.fpagebreak.js CHANGED
@@ -20,7 +20,11 @@
20
  {
21
  $.fbuilder.controls[ 'ffields' ].prototype.editItemEvents.call(this);
22
  },
23
- showTitle: function(){ return ''; },
 
 
 
 
24
  showName: function(){ return ''; },
25
  showShortLabel: function(){ return ''; },
26
  showUserhelp: function(){ return ''; },
20
  {
21
  $.fbuilder.controls[ 'ffields' ].prototype.editItemEvents.call(this);
22
  },
23
+ showTitle: function(){
24
+ if(!$('[name="cff-progress-bar"]').length)
25
+ return '<br /><a href="https://cff-bundles.dwbooster.com/product/progress-bar" target="_blank">Include a progress bar on the form with links to the form pages</a>';
26
+ return '';
27
+ },
28
  showName: function(){ return ''; },
29
  showShortLabel: function(){ return ''; },
30
  showUserhelp: function(){ return ''; },
js/fields-admin/28_fbuilder.fcontainer.js CHANGED
@@ -116,5 +116,13 @@
116
  }
117
  }
118
  );
119
- }
 
 
 
 
 
 
 
 
120
  });
116
  }
117
  }
118
  );
119
+ },
120
+ columnsSticker: function()
121
+ {
122
+ var c = this.columns, s = '<div class="sticker">';
123
+ for(var i = 0; i<c; i++)
124
+ s += '<i class="sticker-'+c+'"></i>';
125
+ s += '</div>';
126
+ return s;
127
+ }
128
  });
js/fields-admin/29_fbuilder.ffieldset.fc.js CHANGED
@@ -20,7 +20,7 @@
20
  collapsed:false, // Admin
21
  display:function()
22
  {
23
- return '<div class="fields '+this.name+((this.collapsed) ? ' collapsed' : '')+' '+this.ftype+'" id="field'+this.form_identifier+'-'+this.index+'" title="'+this.name+'"><div class="arrow ui-icon ui-icon-play "></div><div title="Collapse" class="collapse ui-icon ui-icon-folder-collapsed "></div><div title="Uncollapse" class="uncollapse ui-icon ui-icon-folder-open "></div><div title="Delete" class="remove ui-icon ui-icon-trash "></div><div title="Duplicate" class="copy ui-icon ui-icon-copy "></div><div class="dfield"><FIELDSET class="fcontainer">'+( ( !/^\s*$/.test( this.title ) ) ? '<LEGEND>'+this.title+'</LEGEND>' : '' )+'<label class="collapsed-label">Collapsed ['+this.name+']</label><div class="fieldscontainer"></div></FIELDSET></div><div class="clearer" /></div>';
24
  },
25
  editItemEvents:function()
26
  {
20
  collapsed:false, // Admin
21
  display:function()
22
  {
23
+ return '<div class="fields '+this.name+((this.collapsed) ? ' collapsed' : '')+' '+this.ftype+'" id="field'+this.form_identifier+'-'+this.index+'" title="'+this.name+'"><div class="arrow ui-icon ui-icon-play "></div><div title="Collapse" class="collapse ui-icon ui-icon-folder-collapsed "></div><div title="Uncollapse" class="uncollapse ui-icon ui-icon-folder-open "></div><div title="Delete" class="remove ui-icon ui-icon-trash "></div><div title="Duplicate" class="copy ui-icon ui-icon-copy "></div><div class="dfield"><FIELDSET class="fcontainer">'+( ( !/^\s*$/.test( this.title ) ) ? '<LEGEND>'+this.title+'</LEGEND>' : '' )+$.fbuilder.controls['fcontainer'].prototype.columnsSticker.call(this)+'<label class="collapsed-label">Collapsed ['+this.name+']</label><div class="fieldscontainer"></div></FIELDSET></div><div class="clearer" /></div>';
24
  },
25
  editItemEvents:function()
26
  {
js/fields-admin/30_fbuilder.fdiv.fc.js CHANGED
@@ -18,7 +18,7 @@
18
  collapsed:false,
19
  display:function()
20
  {
21
- return '<div class="fields '+this.name+((this.collapsed) ? ' collapsed' : '')+' '+this.ftype+'" id="field'+this.form_identifier+'-'+this.index+'" title="'+this.name+'"><div class="arrow ui-icon ui-icon-play "></div><div title="Collapse" class="collapse ui-icon ui-icon-folder-collapsed "></div><div title="Uncollapse" class="uncollapse ui-icon ui-icon-folder-open "></div><div title="Delete" class="remove ui-icon ui-icon-trash "></div><div title="Duplicate" class="copy ui-icon ui-icon-copy "></div><div class="dfield"><div class="fcontainer"><label class="collapsed-label">Collapsed ['+this.name+']</label><div class="fieldscontainer"></div></div></div><div class="clearer" /></div>';
22
  },
23
  showTitle:function(){ return ''; },
24
  editItemEvents:function()
18
  collapsed:false,
19
  display:function()
20
  {
21
+ return '<div class="fields '+this.name+((this.collapsed) ? ' collapsed' : '')+' '+this.ftype+'" id="field'+this.form_identifier+'-'+this.index+'" title="'+this.name+'"><div class="arrow ui-icon ui-icon-play "></div><div title="Collapse" class="collapse ui-icon ui-icon-folder-collapsed "></div><div title="Uncollapse" class="uncollapse ui-icon ui-icon-folder-open "></div><div title="Delete" class="remove ui-icon ui-icon-trash "></div><div title="Duplicate" class="copy ui-icon ui-icon-copy "></div><div class="dfield"><div class="fcontainer">'+$.fbuilder.controls['fcontainer'].prototype.columnsSticker.call(this)+'<label class="collapsed-label">Collapsed ['+this.name+']</label><div class="fieldscontainer"></div></div></div><div class="clearer" /></div>';
22
  },
23
  showTitle:function(){ return ''; },
24
  editItemEvents:function()
js/fields-admin/32_fbuilder.fbutton.js CHANGED
@@ -66,7 +66,7 @@
66
  },
67
  _showOnclickSettings: function()
68
  {
69
- return '<label>OnClick event</label><textarea class="large" name="sOnclick" id="sOnclick">'+this.sOnclick+'</textarea>'+
70
  '<label>OnMouseDown event</label><textarea class="large" name="sOnmousedown" id="sOnmousedown">'+this.sOnmousedown+'</textarea>';
71
  },
72
  showTitle: function(){ return ''; },
66
  },
67
  _showOnclickSettings: function()
68
  {
69
+ return '<label>OnClick event</label><textarea class="large" name="sOnclick" id="sOnclick">'+this.sOnclick+'</textarea><div class="clearer"><i>To transform the button into a submit button, enter the onclick event: <b>jQuery(this.form).submit();</b></i></div>'+
70
  '<label>OnMouseDown event</label><textarea class="large" name="sOnmousedown" id="sOnmousedown">'+this.sOnmousedown+'</textarea>';
71
  },
72
  showTitle: function(){ return ''; },
js/fields-admin/fbuilder.fcalculated.js CHANGED
@@ -80,11 +80,20 @@
80
  var args = {};
81
  args.code = e.data.obj.eq;
82
  args.fields = cff_form_fields_list;
83
- if( $.fbuilder[ 'modules' ] )
84
  {
85
  args.operations = {};
86
- for(var i in $.fbuilder[ 'modules' ])
87
- $.extend(true, args.operations, $.fbuilder[ 'modules' ][i]['toolbars'])
 
 
 
 
 
 
 
 
 
88
  }
89
  this.contentWindow.postMessage(JSON.stringify(args), '*');
90
  }
@@ -307,7 +316,7 @@
307
 
308
  if( $.fbuilder[ 'modules' ][ parts[ 0 ] ][ 'tutorial' ] )
309
  {
310
- out = '<input type="button" class="eq_btn" onclick="window.open(\'' + $.fbuilder[ 'modules' ][ parts[ 0 ] ][ 'tutorial' ] + '\');" value="?" title="Tutorial" />';
311
  }
312
  $('#sEqModuleTutorial').html( out );
313
  return out;
@@ -338,11 +347,18 @@
338
  if( $.fbuilder[ 'modules' ][ parts[ 0 ] ][ 'toolbars' ][ parts[ 1 ] ] )
339
  {
340
  var buttons = $.fbuilder[ 'modules' ][ parts[ 0 ] ][ 'toolbars' ][ parts[ 1 ] ][ 'buttons' ];
341
- for( var i = 0, h = buttons.length; i < h; i++ )
342
- {
343
- out += '<input type="button" value="'+buttons[ i ][ 'value' ]+'" onclick="'+tools+'.setSymbol(\''+buttons[ i ][ 'code' ]+'\');'+tools+'.setTip(\''+buttons[ i ][ 'tip' ]+'\');" class="eq_btn" />';
344
- }
345
- this.setTip( '' );
 
 
 
 
 
 
 
346
  }
347
 
348
  $( '#sEqButtonsContainer' ).html( out );
@@ -382,7 +398,7 @@
382
  out += '<option value="' + fName + '">'+item[ 'name' ] + ( ( item[ 'title' ] && !/^\s*$/.test( item[ 'title' ] ) ) ? '('+item[ 'title' ] + ')' : '' ) + '</option>';
383
  }
384
  }
385
- out += '</select><input type="button" value="+" class="eq_btn" onclick="'+tools+'.setField();" /></div><label>Operators</label><div style="text-align:center;" class="groupBox"><div style="text-align:left;">'+$.fbuilder.controls[ 'fCalculated' ][ 'tools' ].loadToolbarList()+'<span id="sEqModuleTutorial">'+$.fbuilder.controls[ 'fCalculated' ][ 'tools' ].loadTutorial( default_toolbar )+'</span></div><div id="sEqButtonsContainer" style="margin-top:10px;">'+$.fbuilder.controls[ 'fCalculated' ][ 'tools' ].loadToolbar( default_toolbar )+'</div><div id="sEqTipsContainer" style="background-color:#DFEFFF;border:1px solid #C2D7EF;padding:5px;margin:5px;display:none;text-align:left;"></div></div><label>Symbol to display at beginning of calculated field</label><input type="text" name="sPrefix" id="sPrefix" class="large" value="'+$.fbuilder.htmlEncode(me.prefix)+'" /><label><input type="checkbox" id="sCurrency" name="sCurrency" '+((me.currency) ? 'CHECKED' : '')+' /> it is a currency</label><label>Symbol to display at the end of calculated field</label><input type="text" name="sSuffix" id="sSuffix" class="large" value="'+$.fbuilder.htmlEncode(me.suffix)+'" /><label>Decimals separator symbol (Ex: 25.20)</label><input type="text" name="sDecimalSymbol" id="sDecimalSymbol" class="large" value="'+$.fbuilder.htmlEncode(me.decimalsymbol)+'" /><label>Symbol for grouping thousands (Ex: 3,000,000)</label><input type="text" name="sGroupingSymbol" id="sGroupingSymbol" class="large" value="'+$.fbuilder.htmlEncode(me.groupingsymbol)+'" />';
386
 
387
  return out;
388
  }
80
  var args = {};
81
  args.code = e.data.obj.eq;
82
  args.fields = cff_form_fields_list;
83
+ if( $.fbuilder['modules'] )
84
  {
85
  args.operations = {};
86
+ for(var i in $.fbuilder['modules'])
87
+ {
88
+ for(var j in $.fbuilder['modules'][i]['toolbars'])
89
+ {
90
+ if($.fbuilder['modules'][i]['toolbars'][j]['buttons'].length)
91
+ {
92
+ $.extend(true, args.operations, $.fbuilder['modules'][i]['toolbars'])
93
+ break;
94
+ }
95
+ }
96
+ }
97
  }
98
  this.contentWindow.postMessage(JSON.stringify(args), '*');
99
  }
316
 
317
  if( $.fbuilder[ 'modules' ][ parts[ 0 ] ][ 'tutorial' ] )
318
  {
319
+ out = '<input type="button" class="eq_btn button-secondary" onclick="window.open(\'' + $.fbuilder[ 'modules' ][ parts[ 0 ] ][ 'tutorial' ] + '\');" value="?" title="Tutorial" />';
320
  }
321
  $('#sEqModuleTutorial').html( out );
322
  return out;
347
  if( $.fbuilder[ 'modules' ][ parts[ 0 ] ][ 'toolbars' ][ parts[ 1 ] ] )
348
  {
349
  var buttons = $.fbuilder[ 'modules' ][ parts[ 0 ] ][ 'toolbars' ][ parts[ 1 ] ][ 'buttons' ];
350
+ if(buttons.length)
351
+ {
352
+ for( var i = 0, h = buttons.length; i < h; i++ )
353
+ {
354
+ out += '<input type="button" value="'+buttons[ i ][ 'value' ]+'" onclick="'+tools+'.setSymbol(\''+buttons[ i ][ 'code' ]+'\');'+tools+'.setTip(\''+buttons[ i ][ 'tip' ]+'\');" class="eq_btn button-secondary" />';
355
+ }
356
+ this.setTip( '' );
357
+ }
358
+ else
359
+ {
360
+ this.setTip( 'The module is distributed with the <a href="https://cff.dwbooster.com/download" target="_blank">Developer and Platinum versions</a> of the plugin.' );
361
+ }
362
  }
363
 
364
  $( '#sEqButtonsContainer' ).html( out );
398
  out += '<option value="' + fName + '">'+item[ 'name' ] + ( ( item[ 'title' ] && !/^\s*$/.test( item[ 'title' ] ) ) ? '('+item[ 'title' ] + ')' : '' ) + '</option>';
399
  }
400
  }
401
+ out += '</select><input type="button" value="+" class="eq_btn button-secondary" onclick="'+tools+'.setField();" /></div><label>Operators</label><div style="text-align:center;" class="groupBox"><div style="text-align:left;">'+$.fbuilder.controls[ 'fCalculated' ][ 'tools' ].loadToolbarList()+'<span id="sEqModuleTutorial">'+$.fbuilder.controls[ 'fCalculated' ][ 'tools' ].loadTutorial( default_toolbar )+'</span></div><div id="sEqButtonsContainer" style="margin-top:10px;">'+$.fbuilder.controls[ 'fCalculated' ][ 'tools' ].loadToolbar( default_toolbar )+'</div><div id="sEqTipsContainer" style="background-color:#DFEFFF;border:1px solid #C2D7EF;padding:5px;margin:5px;display:none;text-align:left;"></div><div style="padding-top:20px;" class="large"><input type="button" class="button-primary large" onclick="window.open(\'https://cff-bundles.dwbooster.com/?category[]=operations\',\'_blank\');" value="More operations [+]" /></div></div><label>Symbol to display at beginning of calculated field</label><input type="text" name="sPrefix" id="sPrefix" class="large" value="'+$.fbuilder.htmlEncode(me.prefix)+'" /><label><input type="checkbox" id="sCurrency" name="sCurrency" '+((me.currency) ? 'CHECKED' : '')+' /> it is a currency</label><label>Symbol to display at the end of calculated field</label><input type="text" name="sSuffix" id="sSuffix" class="large" value="'+$.fbuilder.htmlEncode(me.suffix)+'" /><label>Decimals separator symbol (Ex: 25.20)</label><input type="text" name="sDecimalSymbol" id="sDecimalSymbol" class="large" value="'+$.fbuilder.htmlEncode(me.decimalsymbol)+'" /><label>Symbol for grouping thousands (Ex: 3,000,000)</label><input type="text" name="sGroupingSymbol" id="sGroupingSymbol" class="large" value="'+$.fbuilder.htmlEncode(me.groupingsymbol)+'" />';
402
 
403
  return out;
404
  }
js/fields-public/01_fbuilder.ftext.js CHANGED
@@ -5,6 +5,7 @@
5
  {
6
  title:"Untitled",
7
  ftype:"ftext",
 
8
  predefined:"",
9
  predefinedClick:false,
10
  required:false,
@@ -21,7 +22,7 @@
21
  this.maxlength = $.fbuilder.htmlEncode($.trim(this.maxlength));
22
  this.equalTo = $.fbuilder.htmlEncode($.trim(this.equalTo));
23
  this.predefined = this._getAttr('predefined');
24
- return '<div class="fields '+this.csslayout+' '+this.name+' cff-text-field" id="field'+this.form_identifier+'-'+this.index+'"><label for="'+this.name+'">'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield"><input aria-label="'+$.fbuilder.htmlEncode(this.title)+'" id="'+this.name+'" name="'+this.name+'"'+((this.minlength.length) ? ' minlength="'+(this.minlength)+'"' : '')+((this.maxlength.length) ? ' maxlength="'+(this.maxlength)+'"' : '')+((this.equalTo.length) ? ' equalTo="#'+this.equalTo+this.form_identifier+'"':'' )+' class="field '+this.size+((this.required)?" required":"")+'" '+((this.readonly)?'readonly':'')+' type="text" value="'+$.fbuilder.htmlEncode(this.predefined)+'" /><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
25
  },
26
  after_show:function()
27
  {
5
  {
6
  title:"Untitled",
7
  ftype:"ftext",
8
+ autocomplete:"off",
9
  predefined:"",
10
  predefinedClick:false,
11
  required:false,
22
  this.maxlength = $.fbuilder.htmlEncode($.trim(this.maxlength));
23
  this.equalTo = $.fbuilder.htmlEncode($.trim(this.equalTo));
24
  this.predefined = this._getAttr('predefined');
25
+ return '<div class="fields '+this.csslayout+' '+this.name+' cff-text-field" id="field'+this.form_identifier+'-'+this.index+'"><label for="'+this.name+'">'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield"><input aria-label="'+$.fbuilder.htmlEncode(this.title)+'" id="'+this.name+'" name="'+this.name+'"'+((this.minlength.length) ? ' minlength="'+(this.minlength)+'"' : '')+((this.maxlength.length) ? ' maxlength="'+(this.maxlength)+'"' : '')+((this.equalTo.length) ? ' equalTo="#'+this.equalTo+this.form_identifier+'"':'' )+' class="field '+this.size+((this.required)?" required":"")+'" '+((this.readonly)?'readonly':'')+' type="text" value="'+$.fbuilder.htmlEncode(this.predefined)+'" autocomplete="'+this.autocomplete+'" /><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
26
  },
27
  after_show:function()
28
  {
js/fields-public/03_fbuilder.fcolor.js ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ $.fbuilder.controls[ 'fcolor' ]=function(){};
2
+ $.extend(
3
+ $.fbuilder.controls[ 'fcolor' ].prototype,
4
+ $.fbuilder.controls[ 'ffields' ].prototype,
5
+ {
6
+ title:"Untitled",
7
+ ftype:"fcolor",
8
+ predefined:"",
9
+ predefinedClick:false,
10
+ required:false,
11
+ readonly:false,
12
+ size:"medium",
13
+ show:function()
14
+ {
15
+ this.predefined = this._getAttr('predefined');
16
+ return '<div class="fields '+this.csslayout+' '+this.name+' cff-color-field" id="field'+this.form_identifier+'-'+this.index+'"><label for="'+this.name+'">'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield"><input aria-label="'+$.fbuilder.htmlEncode(this.title)+'" id="'+this.name+'" name="'+this.name+'"'+' class="field '+this.size+((this.required)?" required":"")+'" '+((this.readonly)?'readonly':'')+' type="color" value="'+$.fbuilder.htmlEncode(this.predefined)+'" /><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
17
+ },
18
+ after_show:function()
19
+ {
20
+ },
21
+ val:function(raw)
22
+ {
23
+ raw = raw || false;
24
+ var e = $( '[id="' + this.name + '"]:not(.ignore)' );
25
+ if( e.length ) return $.fbuilder.parseValStr( e.val(), raw );
26
+ return 0;
27
+ }
28
+ }
29
+ );
js/fields-public/03_fbuilder.femail.js CHANGED
@@ -5,6 +5,7 @@
5
  {
6
  title:"Email",
7
  ftype:"femail",
 
8
  predefined:"",
9
  predefinedClick:false,
10
  required:false,
@@ -16,7 +17,7 @@
16
  show:function()
17
  {
18
  this.predefined = this._getAttr('predefined');
19
- return '<div class="fields '+this.csslayout+' '+this.name+' cff-email-field" id="field'+this.form_identifier+'-'+this.index+'"><label for="'+this.name+'">'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield"><input aria-label="'+$.fbuilder.htmlEncode(this.title)+'" id="'+this.name+'" name="'+this.name+'" '+((this.equalTo!="")?"equalTo=\"#"+$.fbuilder.htmlEncode(this.equalTo+this.form_identifier)+"\"":"" )+' class="field email '+this.size+((this.required)?" required":"")+'" type="email" value="'+$.fbuilder.htmlEncode(this.predefined)+'" '+((this.readonly)?'readonly':'')+' /><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
20
  },
21
  after_show:function()
22
  {
5
  {
6
  title:"Email",
7
  ftype:"femail",
8
+ autocomplete:"off",
9
  predefined:"",
10
  predefinedClick:false,
11
  required:false,
17
  show:function()
18
  {
19
  this.predefined = this._getAttr('predefined');
20
+ return '<div class="fields '+this.csslayout+' '+this.name+' cff-email-field" id="field'+this.form_identifier+'-'+this.index+'"><label for="'+this.name+'">'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield"><input aria-label="'+$.fbuilder.htmlEncode(this.title)+'" id="'+this.name+'" name="'+this.name+'" '+((this.equalTo!="")?"equalTo=\"#"+$.fbuilder.htmlEncode(this.equalTo+this.form_identifier)+"\"":"" )+' class="field email '+this.size+((this.required)?" required":"")+'" type="email" value="'+$.fbuilder.htmlEncode(this.predefined)+'" '+((this.readonly)?'readonly':'')+' autocomplete="'+this.autocomplete+'" /><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
21
  },
22
  after_show:function()
23
  {
js/fields-public/04_fbuilder.fdate.js CHANGED
@@ -9,6 +9,7 @@
9
  predefinedClick:false,
10
  size:"medium",
11
  required:false,
 
12
 
13
  // Date component
14
  showDatepicker: true,
@@ -194,7 +195,7 @@
194
  str += '<option value="' + h + '">' + h + '</option>';
195
  i++;
196
  }
197
- return '<select id="'+me.name+'_hours" name="'+me.name+'_hours" class="hours-component" aria-label="'+$.fbuilder.htmlEncode(me.ariaHourLabel)+'">' + str + '</select>:';
198
  },
199
  get_minutes:function()
200
  {
@@ -211,14 +212,14 @@
211
  str += '<option value="' + m + '">' + m + '</option>';
212
  i++;
213
  }
214
- return '<select id="'+me.name+'_minutes" name="'+me.name+'_minutes" class="minutes-component" aria-label="'+$.fbuilder.htmlEncode(me.ariaMinuteLabel)+'">' + str + '</select>';
215
  },
216
  get_ampm:function()
217
  {
218
  var str = '';
219
  if( this.tformat == 12 )
220
  {
221
- return '<select id="'+this.name+'_ampm" class="ampm-component" aria-label="'+$.fbuilder.htmlEncode(this.ariaAMPMLabel)+'"><option value="am">am</option><option value="pm">pm</option></select>';
222
  }
223
  return str;
224
  },
@@ -258,7 +259,8 @@
258
  p = {
259
  dateFormat: me.dformat.replace(/yyyy/g,"yy"),
260
  minDate: me._getAttr('minDate'),
261
- maxDate: me._getAttr('maxDate')
 
262
  },
263
  dp = $( "#"+me.name+"_date" ),
264
  dd = (me.defaultDate != "") ? me.defaultDate : ( ( me.predefined != "" ) ? me.predefined : new Date() );
9
  predefinedClick:false,
10
  size:"medium",
11
  required:false,
12
+ readonly:false,
13
 
14
  // Date component
15
  showDatepicker: true,
195
  str += '<option value="' + h + '">' + h + '</option>';
196
  i++;
197
  }
198
+ return '<select id="'+me.name+'_hours" name="'+me.name+'_hours" class="hours-component" aria-label="'+$.fbuilder.htmlEncode(me.ariaHourLabel)+'" '+((me.readonly) ? 'DISABLED' : '')+'>' + str + '</select>:';
199
  },
200
  get_minutes:function()
201
  {
212
  str += '<option value="' + m + '">' + m + '</option>';
213
  i++;
214
  }
215
+ return '<select id="'+me.name+'_minutes" name="'+me.name+'_minutes" class="minutes-component" aria-label="'+$.fbuilder.htmlEncode(me.ariaMinuteLabel)+'" '+((me.readonly) ? 'DISABLED' : '')+'>' + str + '</select>';
216
  },
217
  get_ampm:function()
218
  {
219
  var str = '';
220
  if( this.tformat == 12 )
221
  {
222
+ return '<select id="'+this.name+'_ampm" class="ampm-component" aria-label="'+$.fbuilder.htmlEncode(this.ariaAMPMLabel)+'" '+((this.readonly) ? 'DISABLED' : '')+'><option value="am">am</option><option value="pm">pm</option></select>';
223
  }
224
  return str;
225
  },
259
  p = {
260
  dateFormat: me.dformat.replace(/yyyy/g,"yy"),
261
  minDate: me._getAttr('minDate'),
262
+ maxDate: me._getAttr('maxDate'),
263
+ disabled: me.readonly
264
  },
265
  dp = $( "#"+me.name+"_date" ),
266
  dd = (me.defaultDate != "") ? me.defaultDate : ( ( me.predefined != "" ) ? me.predefined : new Date() );
js/fields-public/05_fbuilder.ftextarea.js CHANGED
@@ -5,6 +5,7 @@
5
  {
6
  title:"Untitled",
7
  ftype:"ftextarea",
 
8
  predefined:"",
9
  predefinedClick:false,
10
  required:false,
@@ -18,7 +19,7 @@
18
  this.minlength = $.fbuilder.htmlEncode($.trim(this.minlength));
19
  this.maxlength = $.fbuilder.htmlEncode($.trim(this.maxlength));
20
  this.predefined = this._getAttr('predefined');
21
- return '<div class="fields '+this.csslayout+' '+this.name+' cff-textarea-field" id="field'+this.form_identifier+'-'+this.index+'"><label for="'+this.name+'">'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield"><textarea aria-label="'+$.fbuilder.htmlEncode(this.title)+'" '+((!/^\s*$/.test(this.rows)) ? 'rows='+this.rows : '' )+' id="'+this.name+'" name="'+this.name+'"'+((this.minlength.length) ? ' minlength="'+this.minlength+'"' : '')+((this.maxlength.length) ? ' maxlength="'+this.maxlength+'"' : '')+' class="field '+this.size+((this.required)?" required":"")+'" '+((this.readonly)?'readonly':'')+'>'+((!this.predefinedClick) ? this.predefined : '')+'</textarea><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
22
  },
23
  val:function(raw)
24
  {
5
  {
6
  title:"Untitled",
7
  ftype:"ftextarea",
8
+ autocomplete:"off",
9
  predefined:"",
10
  predefinedClick:false,
11
  required:false,
19
  this.minlength = $.fbuilder.htmlEncode($.trim(this.minlength));
20
  this.maxlength = $.fbuilder.htmlEncode($.trim(this.maxlength));
21
  this.predefined = this._getAttr('predefined');
22
+ return '<div class="fields '+this.csslayout+' '+this.name+' cff-textarea-field" id="field'+this.form_identifier+'-'+this.index+'"><label for="'+this.name+'">'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield"><textarea aria-label="'+$.fbuilder.htmlEncode(this.title)+'" '+((!/^\s*$/.test(this.rows)) ? 'rows='+this.rows : '' )+' id="'+this.name+'" name="'+this.name+'"'+((this.minlength.length) ? ' minlength="'+this.minlength+'"' : '')+((this.maxlength.length) ? ' maxlength="'+this.maxlength+'"' : '')+' class="field '+this.size+((this.required)?" required":"")+'" '+((this.readonly)?'readonly':'')+' autocomplete="'+this.autocomplete+'">'+((!this.predefinedClick) ? this.predefined : '')+'</textarea><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
23
  },
24
  val:function(raw)
25
  {
js/fields-public/06_fbuilder.fcheck.js CHANGED
@@ -7,6 +7,7 @@
7
  ftype:"fcheck",
8
  layout:"one_column",
9
  required:false,
 
10
  merge:1,
11
  max:-1,
12
  maxError:"Check no more than {0} boxes",
@@ -16,7 +17,7 @@
16
  {
17
  this.choicesVal = ((typeof(this.choicesVal) != "undefined" && this.choicesVal !== null)?this.choicesVal:this.choices);
18
  var str = "",
19
- classDep;
20
 
21
  if ( typeof this.choicesDep == "undefined" || this.choicesDep == null )
22
  this.choicesDep = new Array();
@@ -30,7 +31,7 @@
30
 
31
  classDep = (this.choicesDep[ i ].length) ? 'depItem': '';
32
 
33
- str += '<div class="'+this.layout+'"><label for="'+this.name+'_cb'+i+'"><input aria-label="'+$.fbuilder.htmlEncode(this.choices[i])+'" name="'+this.name+'[]" id="'+this.name+'_cb'+i+'" class="field '+classDep+' group '+((this.required)?" required":"")+'" value="'+$.fbuilder.htmlEncode(this.choicesVal[i])+'" vt="'+$.fbuilder.htmlEncode((this.toSubmit == 'text') ? this.choices[i] : this.choicesVal[i])+'" type="checkbox" '+((this.choiceSelected[i])?"checked":"")+'/> <span>'+$.fbuilder.htmlDecode( this.choices[i] )+'</span></label></div>';
34
  }
35
  return '<div class="fields '+this.csslayout+' '+this.name+' cff-checkbox-field" id="field'+this.form_identifier+'-'+this.index+'"><label>'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield">'+str+'<div class="clearer"></div><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
36
  },
7
  ftype:"fcheck",
8
  layout:"one_column",
9
  required:false,
10
+ readonly:false,
11
  merge:1,
12
  max:-1,
13
  maxError:"Check no more than {0} boxes",
17
  {
18
  this.choicesVal = ((typeof(this.choicesVal) != "undefined" && this.choicesVal !== null)?this.choicesVal:this.choices);
19
  var str = "",
20
+ classDep;
21
 
22
  if ( typeof this.choicesDep == "undefined" || this.choicesDep == null )
23
  this.choicesDep = new Array();
31
 
32
  classDep = (this.choicesDep[ i ].length) ? 'depItem': '';
33
 
34
+ str += '<div class="'+this.layout+'"><label for="'+this.name+'_cb'+i+'"><input aria-label="'+$.fbuilder.htmlEncode(this.choices[i])+'" name="'+this.name+'[]" id="'+this.name+'_cb'+i+'" class="field '+classDep+' group '+((this.required)?" required":"")+'" value="'+$.fbuilder.htmlEncode(this.choicesVal[i])+'" vt="'+$.fbuilder.htmlEncode((this.toSubmit == 'text') ? this.choices[i] : this.choicesVal[i])+'" type="checkbox" '+(this.readonly ? ' onclick="return false;" ' : '')+((this.choiceSelected[i])?"checked":"")+'/> <span>'+$.fbuilder.htmlDecode( this.choices[i] )+'</span></label></div>';
35
  }
36
  return '<div class="fields '+this.csslayout+' '+this.name+' cff-checkbox-field" id="field'+this.form_identifier+'-'+this.index+'"><label>'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield">'+str+'<div class="clearer"></div><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
37
  },
js/fields-public/07_fbuilder.fradio.js CHANGED
@@ -7,6 +7,7 @@
7
  ftype:"fradio",
8
  layout:"one_column",
9
  required:false,
 
10
  toSubmit:"text",
11
  choiceSelected:"",
12
  showDep:false,
@@ -35,7 +36,7 @@
35
 
36
  for (var i=0;i<l;i++)
37
  {
38
- str += '<div class="'+this.layout+'"><label for="'+this.name+'_rb'+i+'"><input aria-label="'+$.fbuilder.htmlEncode(this.choices[i])+'" name="'+this.name+'" id="'+this.name+'_rb'+i+'" class="field '+classDep+' group '+((this.required)?" required":"")+'" value="'+$.fbuilder.htmlEncode(this.choicesVal[i])+'" vt="'+$.fbuilder.htmlEncode((this.toSubmit=='text') ? this.choices[i] : this.choicesVal[i])+'" type="radio" '+((this.choices[i]+' - '+this.choicesVal[i]==this.choiceSelected)?"checked":"")+'/> <span>'+$.fbuilder.htmlDecode( this.choices[i] )+'</span></label></div>';
39
  }
40
 
41
  return '<div class="fields '+this.csslayout+' '+this.name+' cff-radiobutton-field" id="field'+this.form_identifier+'-'+this.index+'"><label>'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield">'+str+'<div class="clearer"></div><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
7
  ftype:"fradio",
8
  layout:"one_column",
9
  required:false,
10
+ readonly:false,
11
  toSubmit:"text",
12
  choiceSelected:"",
13
  showDep:false,
36
 
37
  for (var i=0;i<l;i++)
38
  {
39
+ str += '<div class="'+this.layout+'"><label for="'+this.name+'_rb'+i+'"><input aria-label="'+$.fbuilder.htmlEncode(this.choices[i])+'" name="'+this.name+'" id="'+this.name+'_rb'+i+'" class="field '+classDep+' group '+((this.required)?" required":"")+'" value="'+$.fbuilder.htmlEncode(this.choicesVal[i])+'" vt="'+$.fbuilder.htmlEncode((this.toSubmit=='text') ? this.choices[i] : this.choicesVal[i])+'" type="radio" '+(this.readonly ? ' onclick="return false;" ' : '')+((this.choices[i]+' - '+this.choicesVal[i]==this.choiceSelected)?"checked":"")+'/> <span>'+$.fbuilder.htmlDecode( this.choices[i] )+'</span></label></div>';
40
  }
41
 
42
  return '<div class="fields '+this.csslayout+' '+this.name+' cff-radiobutton-field" id="field'+this.form_identifier+'-'+this.index+'"><label>'+this.title+''+((this.required)?"<span class='r'>*</span>":"")+'</label><div class="dfield">'+str+'<div class="clearer"></div><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
js/fields-public/09_fbuilder.ffile.js CHANGED
@@ -85,6 +85,12 @@
85
  $( this ).after( filesContainer );
86
  }
87
  });
 
 
 
 
 
 
88
  }
89
  }
90
  );
85
  $( this ).after( filesContainer );
86
  }
87
  });
88
+ },
89
+ val : function()
90
+ {
91
+ var e = $( "[id='" + this.name + "']:not(.ignore)" );
92
+ if( e.length ) return e[0].files;
93
+ return '';
94
  }
95
  }
96
  );
js/fields-public/16_fbuilder.fsummary.js CHANGED
@@ -110,8 +110,17 @@
110
  }
111
  else
112
  {
113
- var c = $( '[id="'+i+'_caption"]' );
114
- v.push( ( c.length && !/^\s*$/.test( c.html() ) ) ? c.html() : e.val() );
 
 
 
 
 
 
 
 
 
115
  }
116
  }
117
  }
110
  }
111
  else
112
  {
113
+ if(e.attr('type') == 'file')
114
+ {
115
+ var f = [];
116
+ $.each(e[0].files, function(i,o){f.push(o.name);});
117
+ v.push(f.join(', '));
118
+ }
119
+ else
120
+ {
121
+ var c = $( '[id="'+i+'_caption"]' );
122
+ v.push( ( c.length && !/^\s*$/.test( c.html() ) ) ? c.html() : e.val() );
123
+ }
124
  }
125
  }
126
  }
js/fields-public/32_fbuilder.fbutton.js CHANGED
@@ -35,11 +35,16 @@
35
  $('#'+this.name).click(
36
  function()
37
  {
38
- var e = $( this );
39
  if( e.hasClass( 'calculate-button' ) )
40
  {
41
  var items = $.fbuilder[ 'forms' ][ me.form_identifier ].getItems();
42
- if(me.sLoading) $('<div class="cff-processing-form"></div>').appendTo(e.closest('#fbuilder'));
 
 
 
 
 
43
  $(document).on('equationsQueueEmpty', function(evt, id){
44
  if(id == me.form_identifier)
45
  {
35
  $('#'+this.name).click(
36
  function()
37
  {
38
+ var e = $( this ), f;
39
  if( e.hasClass( 'calculate-button' ) )
40
  {
41
  var items = $.fbuilder[ 'forms' ][ me.form_identifier ].getItems();
42
+ if(me.sLoading)
43
+ {
44
+ f = e.closest('#fbuilder');
45
+ f.find('.cff-processing-form').remove();
46
+ $('<div class="cff-processing-form"></div>').appendTo(f);
47
+ }
48
  $(document).on('equationsQueueEmpty', function(evt, id){
49
  if(id == me.form_identifier)
50
  {
js/fields-public/fbuilder.fcalculated.js CHANGED
@@ -78,14 +78,20 @@
78
  }
79
  ).on('keyup', function(){
80
  me.manual = true;
81
- }).on('change', function(){
82
- if('manual' in me && me.manual && me.formatDynamically)
83
- {
84
- me.manual = false;
85
- var v = me.val();
86
- this.value = $.fbuilder.calculator.format(v, configuration);
87
- }
 
 
 
 
88
  });
 
 
89
  },
90
  showHideDep: function( toShow, toHide, hiddenByContainer )
91
  {
@@ -501,11 +507,13 @@
501
  },
502
  format : function( value, config )
503
  {
 
504
  if( !/^\s*$/.test( value ) )
505
  {
506
- var symbol = '';
507
  if( $.isNumeric( value ) && !/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)/.test( value ) )
508
  {
 
509
  if( value < 0 ) symbol = '-';
510
  var parts = value.toString().replace( "-", "" ).split("."),
511
  counter = 0,
@@ -521,10 +529,16 @@
521
  }
522
  parts[0] = str;
523
  }
524
-
525
  value = parts.join( config.decimalsymbol );
526
  }
527
 
 
 
 
 
 
 
528
  if( config.prefix )
529
  {
530
  if(!config.currency)
@@ -534,10 +548,9 @@
534
  }
535
  value = config.prefix + value;
536
  }
537
- if( config.suffix )
538
- {
539
- value += config.suffix;
540
- }
541
  value = symbol+value;
542
  }
543
  return value;
78
  }
79
  ).on('keyup', function(){
80
  me.manual = true;
81
+ if('manual' in me) e.trigger('calcualtedfield_changed');
82
+ }).on('change', function(){
83
+ if('manual' in me && me.manual)
84
+ {
85
+ if(me.formatDynamically)
86
+ {
87
+ me.manual = false;
88
+ var v = me.val();
89
+ this.value = $.fbuilder.calculator.format(v, configuration);
90
+ }
91
+ }
92
  });
93
+
94
+ $( '#cp_calculatedfieldsf_pform'+me.form_identifier ).bind( 'reset', function(){me.manua = false;} );
95
  },
96
  showHideDep: function( toShow, toHide, hiddenByContainer )
97
  {
507
  },
508
  format : function( value, config )
509
  {
510
+ config = $.extend({}, config);
511
  if( !/^\s*$/.test( value ) )
512
  {
513
+ var symbol = '', isNumeric = false;
514
  if( $.isNumeric( value ) && !/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)/.test( value ) )
515
  {
516
+ isNumeric = true;
517
  if( value < 0 ) symbol = '-';
518
  var parts = value.toString().replace( "-", "" ).split("."),
519
  counter = 0,
529
  }
530
  parts[0] = str;
531
  }
532
+ if(!('decimalsymbol' in config)) config.decimalsymbol = '.';
533
  value = parts.join( config.decimalsymbol );
534
  }
535
 
536
+ if(config.currency && !isNumeric)
537
+ {
538
+ delete config.prefix;
539
+ delete config.suffix;
540
+ }
541
+
542
  if( config.prefix )
543
  {
544
  if(!config.currency)
548
  }
549
  value = config.prefix + value;
550
  }
551
+
552
+ if( config.suffix ) value += config.suffix;
553
+
 
554
  value = symbol+value;
555
  }
556
  return value;
js/modules/01_mathematical_logical/admin/module_admin.js CHANGED
@@ -31,6 +31,7 @@ fbuilderjQuery[ 'fbuilder' ][ 'modules' ][ 'default' ] = {
31
  { "value" : "SQRT", "code" : "SQRT(", "tip" : "Returns the square root of the number passed as parameter. <strong>SQRT(number1, number2)</strong>" },
32
  { "value" : "MAX", "code" : "MAX(", "tip" : "Returns the greater value of the two parameters. <strong>MAX(number1, number2)</strong>" },
33
  { "value" : "MIN", "code" : "MIN(", "tip" : "Returns the lesser value of the two parameters. <strong>MIN(number1, number2)</strong>" },
 
34
  { "value" : "GCD", "code" : "GCD(", "tip" : "Returns greatest common divisor between the two parameters. <strong>GCD(number1, number2)</strong>" },
35
  { "value" : "LCM", "code" : "LCM(", "tip" : "Returns the least common multiple between two parameters. <strong>LCM(number1, number2)</strong>" },
36
  { "value" : "SIN", "code" : "SIN(", "tip" : "SIN(x) returns the sine of x (x in radians).<br> <strong>SIN(3) = 0.1411200080598672</strong>" },
31
  { "value" : "SQRT", "code" : "SQRT(", "tip" : "Returns the square root of the number passed as parameter. <strong>SQRT(number1, number2)</strong>" },
32
  { "value" : "MAX", "code" : "MAX(", "tip" : "Returns the greater value of the two parameters. <strong>MAX(number1, number2)</strong>" },
33
  { "value" : "MIN", "code" : "MIN(", "tip" : "Returns the lesser value of the two parameters. <strong>MIN(number1, number2)</strong>" },
34
+ { "value" : "FORMAT", "code" : "FORMAT(", "tip" : "Formats the number passed as the first parameters, based on the settigns passed as second parameter. <strong>FORMAT(-1234.56, {prefix:&quot;$&quot;, suffix:&quot; usd&quot;, groupingsymbol:&quot;,&quot;, decimalsymbol:&quot;.&quot;, currency:true}) = &quot;-$1,234.56 usd&quot;</strong>" },
35
  { "value" : "GCD", "code" : "GCD(", "tip" : "Returns greatest common divisor between the two parameters. <strong>GCD(number1, number2)</strong>" },
36
  { "value" : "LCM", "code" : "LCM(", "tip" : "Returns the least common multiple between two parameters. <strong>LCM(number1, number2)</strong>" },
37
  { "value" : "SIN", "code" : "SIN(", "tip" : "SIN(x) returns the sine of x (x in radians).<br> <strong>SIN(3) = 0.1411200080598672</strong>" },
js/modules/01_mathematical_logical/public/module_public.js CHANGED
@@ -266,6 +266,13 @@ fbuilderjQuery[ 'fbuilder' ][ 'modules' ][ 'default' ] = {
266
  };
267
  }
268
 
 
 
 
 
 
 
 
269
  fbuilderjQuery[ 'fbuilder' ][ 'extend_window' ]( fbuilderjQuery[ 'fbuilder' ][ 'modules' ][ 'default' ][ 'prefix' ], CF_LOGICAL );
270
  },
271
 
266
  };
267
  }
268
 
269
+ if(window.FORMAT == undefined)
270
+ {
271
+ window.FORMAT = window.format = function(x,o){
272
+ return fbuilderjQuery.fbuilder.calculator.format(x,o);
273
+ };
274
+ }
275
+
276
  fbuilderjQuery[ 'fbuilder' ][ 'extend_window' ]( fbuilderjQuery[ 'fbuilder' ][ 'modules' ][ 'default' ][ 'prefix' ], CF_LOGICAL );
277
  },
278
 
js/modules/02_datetime/admin/module_admin.js ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ fbuilderjQuery = (typeof fbuilderjQuery != 'undefined' ) ? fbuilderjQuery : jQuery;
2
+ fbuilderjQuery[ 'fbuilder' ] = fbuilderjQuery[ 'fbuilder' ] || {};
3
+ fbuilderjQuery[ 'fbuilder' ][ 'modules' ] = fbuilderjQuery[ 'fbuilder' ][ 'modules' ] || {};
4
+
5
+ fbuilderjQuery[ 'fbuilder' ][ 'modules' ][ 'datetime' ] = {
6
+ 'tutorial' : 'https://cff.dwbooster.com/documentation#datetime-module',
7
+ 'toolbars' : {
8
+ 'datetime' : {
9
+ 'label' : 'Date Time functions',
10
+ 'buttons' : [
11
+ { "value" : "DATEOBJ", "code" : "DATEOBJ(", "tip" : "<p>Get the date object from an string representation of date. <strong>DATEOBJ( date_string, format )</strong></p><p><strong>DATEOBJ(&quot;2013-05-21&quot;, &quot;yyyy-mm-dd&quot;)</strong></p><p>Result: <strong>date object</strong></p>" },
12
+ { "value" : "YEAR", "code" : "YEAR(", "tip" : "<p>Get the year from an string representation of date. <strong>YEAR( date_string, format )</strong></p><p><strong>YEAR(&quot;2013-05-21&quot;, &quot;yyyy-mm-dd&quot;)</strong></p><p>Result: <strong>2013</strong></p>" },
13
+ { "value" : "MONTH", "code" : "MONTH(", "tip" : "<p>Get the month from an string representation of date. <strong>MONTH( date_string, format )</strong></p><p><strong>MONTH(&quot;2013-05-21&quot;, &quot;yyyy-mm-dd&quot;)</strong></p><p>Result: <strong>5</strong></p>" },
14
+ { "value" : "DAY", "code" : "DAY(", "tip" : "<p>Get the days from an string representation of date. <strong>DAY( date_string, format )</strong></p><p><strong>DAY(&quot;2013-05-21&quot;, &quot;yyyy-mm-dd&quot;)</strong></p><p>Result: <strong>21</strong></p>" },
15
+ { "value" : "WEEKDAY", "code" : "WEEKDAY(", "tip" : "<p>Get the week day from an string representation of date. <strong>WEEKDAY( date_string, format )</strong></p><p><strong>WEEKDAY(&quot;2013-10-27&quot;, &quot;yyyy-mm-dd&quot;)</strong></p><p>Result: <strong>1</strong> Sunday is the day number one</p>" },
16
+ { "value" : "WEEKNUM", "code" : "WEEKNUM(", "tip" : "<p>Get the week number from an string representation of date, a year has 53 weeks. <strong>WEEKNUM( date_string, format )</strong></p><p><strong>WEEKNUM(&quot;2013-10-27&quot;, &quot;yyyy-mm-dd&quot;)</strong></p><p>Result: <strong>43</strong></p>" },
17
+ { "value" : "HOURS", "code" : "HOURS(", "tip" : "<p>Get hours from an string representation of datetime. <strong>HOURS( datetime_string, format )</strong></p><p><strong>HOURS(&quot;2013-10-27 01:21&quot;, &quot;yyyy-mm-dd hh:ii&quot;)</strong></p><p>Result: <strong>1</strong></p>" },
18
+ { "value" : "MINUTES", "code" : "MINUTES(", "tip" : "<p>Get minutes from an string representation of datetime. <strong>MINUTES( datetime_string, format )</strong></p><p><strong>MINUTES(&quot;2013-10-27 01:22&quot;, &quot;yyyy-mm-dd hh:ii&quot;)</strong></p><p>Result: <strong>22</strong></p>" },
19
+ { "value" : "SECONDS", "code" : "SECONDS(", "tip" : "<p>Get seconds from an string representation of datetime. <strong>SECONDS( datetime_string, format )</strong></p><p><strong>SECONDS(&quot;2013-10-27 01:22:56&quot;, &quot;yyyy-mm-dd hh:ii:ss&quot;)</strong></p><p>Result: <strong>56</strong></p>" },
20
+ { "value" : "NOW", "code" : "NOW(", "tip" : "<p>Get a date object with the current day-time information. <strong>NOW()</strong></p><p><strong>NOW()</strong></p><p>Result: <strong>2013-10-27 01:42:19</strong></p>" },
21
+ { "value" : "TODAY", "code" : "TODAY(", "tip" : "<p>Get a date object with the current day information, without the time part. <strong>TODAY()</strong></p>" },
22
+ { "value" : "EOMONTH", "code" : "EOMONTH(", "tip" : "<p>Get the last day of the month. <strong>EOMONTH(date_obj, number)</strong> where the number parameter is optional.</p><p><strong>EOMONTH(DATEOBJ(&quot;2021-03-04&quot;))</strong> Result: <strong>Mar 31 2021</strong></p><p><strong>EOMONTH(DATEOBJ(&quot;2021-03-04&quot;), 4)</strong> Result: <strong>Jul 31 2021</strong></p><p><strong>EOMONTH(DATEOBJ(&quot;2021-03-04&quot;), -3)</strong> Result: <strong>Dec 31 2020</strong></p>" },
23
+ { "value" : "DATEDIFF", "code" : "DATEDIFF(", "tip" : "<p>Get the difference between two dates strings representation</p><p><strong>DATEDIFF(date_one, date_two, date_format, return)</strong></p><p>The function return an object, whose value depends of argument &quot;return&quot;</p><p>Possible values of return argument:<br />d - return the number of days between two dates<br />m - return the number of months between two dates, and remaining days<br />y - return the number of years between two dates, remaining months, and remaining days</p><p><strong>DATEDIFF(&quot;2013-10-27&quot;, &quot;2012-06-22&quot;, &quot;yyyy-mm-dd&quot;, &quot;y&quot;)[&quot;months&quot;]</strong><p><p>Result:<strong> 5 </strong></p>" },
24
+ { "value" : "DATETIMESUM", "code" : "DATETIMESUM(", "tip" : "<p>Increases the date-time string representation in the number of seconds, minutes, hours, days, months, or years, passed as parameter.</p><p><strong>DATETIMESUM( date_string, format, number, to_increase )</strong></p><p>DATETIMESUM(&quot;2013-10-27&quot;, &quot;yyyy-mm-dd&quot;, 5, &quot;d&quot;)</p><p>Result: <strong>The date object representation of 2013/11/01</strong></p>" },
25
+ { "value" : "GETDATETIMESTRING", "code" : "GETDATETIMESTRING(", "tip" : "<p>Returns the string representation of a date object</p><p><strong>GETDATETIMESTRING( datetime_object, format )</strong></p><p><strong>GETDATETIMESTRING(TODAY(), &quot;yyyy-mm-dd&quot;)</strong></p><p>Result: <strong>2013-10-27</strong></p>" }
26
+ ]
27
+ }
28
+ }
29
+ };
js/modules/02_datetime/public/01_datetime.js ADDED
@@ -0,0 +1,308 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * datetime.js v0.1
3
+ * By: CALCULATED FIELD PROGRAMMERS
4
+ * The script allows operations with date and time
5
+ * Copyright 2013 CODEPEOPLE
6
+ * You may use this project under MIT or GPL licenses.
7
+ */
8
+
9
+ ;(function(root){
10
+ var lib = {},
11
+ default_format = ( typeof window.DATETIMEFORMAT != 'undefined' ) ? window.DATETIMEFORMAT : 'yyyy-mm-dd hh:ii:ss a',
12
+ regExp = '';
13
+
14
+
15
+ Date.prototype.valid = function() {
16
+ return isFinite(this);
17
+ };
18
+
19
+ /*** PRIVATE FUNCTIONS ***/
20
+ function _getDateObj( date, format ){
21
+ var d = new Date();
22
+
23
+ format = format || default_format;
24
+
25
+ if( typeof date != 'undefined' ){
26
+ if( typeof date == 'number' ){
27
+ d = new Date(Math.ceil(date*86400000));
28
+ }else if( typeof date == 'string' ){
29
+ var p;
30
+ if( null != ( p = /(\d{4})[\/\-\.](\d{1,2})[\/\-\.](\d{1,2})/.exec( date ) ) ){
31
+ if( /y{4}[\/\-\.]m{2}[\/\-\.]d{2}/i.test( format ) ){
32
+ d = new Date( p[ 1 ], ( p[ 2 ] - 1 ), p[ 3 ] );
33
+ }else{
34
+ d = new Date( p[ 1 ], ( p[ 3 ] - 1 ), p[ 2 ] );
35
+ }
36
+ date = date.replace( p[ 0 ], '' );
37
+ }
38
+
39
+ if( null != ( p = /(\d{1,2})[\/\-\.](\d{1,2})[\/\-\.](\d{4})/.exec( date ) ) ){
40
+ if( /d{2}[\/\-\.]m{2}[\/\-\.]y{4}/i.test( format ) ){
41
+ d = new Date( p[ 3 ], ( p[ 2 ] - 1 ), p[ 1 ] );
42
+ }else{
43
+ d = new Date( p[ 3 ], ( p[ 1 ] - 1 ), p[ 2 ] );
44
+ }
45
+ date = date.replace( p[ 0 ], '' );
46
+ }
47
+
48
+ if( null != ( p = /(\d{1,2})[:\.](\d{1,2})([:\.](\d{1,2}))?\s*([ap]m)?/i.exec( date ) ) ){
49
+ if(/h+/i.test( format ) ){
50
+ if( typeof p[ 5 ] != 'undefined' && /pm/i.test( p[ 5 ] ) ) p[ 1 ] = ( p[ 1 ]*1 + 12 ) % 24;
51
+ d.setHours( p[ 1 ] );
52
+ }
53
+
54
+ if(/i+/i.test( format ) ) d.setMinutes( p[ 2 ] );
55
+ if(/s+/i.test( format ) && (typeof p[ 4 ] != 'undefined') ) d.setSeconds( p[ 4 ] );
56
+ }
57
+ }else{
58
+ d = new Date( date );
59
+ }
60
+ }
61
+ return d;
62
+ };
63
+
64
+ /*** PUBLIC FUNCTIONS ***/
65
+
66
+ lib.cf_datetime_version = '0.1';
67
+
68
+ // DATEOBJ( date_string, date_format_string )
69
+ lib.DATEOBJ = function( date, format ){
70
+ var d = _getDateObj( date, format );
71
+ if( d.valid() ) return d;
72
+ return false;
73
+ };
74
+
75
+ // YEAR( date_string, date_format_string )
76
+ lib.YEAR = function( date, format ){
77
+ var d = _getDateObj( date, format );
78
+ if( d.valid() ) return d.getFullYear();
79
+ return false;
80
+ };
81
+
82
+ // MONTH( date_string, date_format_string )
83
+ lib.MONTH = function( date, format ){
84
+ var d = _getDateObj( date, format );
85
+ if( d.valid() ) return d.getMonth()+1;
86
+ return false;
87
+ };
88
+
89
+ // DAY( date_string, date_format_string )
90
+ lib.DAY = function( date, format ){
91
+ var d = _getDateObj( date, format );
92
+ if( d.valid() ) return d.getDate();
93
+ return false;
94
+ };
95
+
96
+ // WEEKDAY( date_string, date_format_string )
97
+ lib.WEEKDAY = function( date, format ){
98
+ var d = _getDateObj( date, format );
99
+ if( d.valid() ) return d.getDay()+1;
100
+ return false;
101
+ };
102
+
103
+ // WEEKDAY( date_string, date_format_string )
104
+ lib.WEEKNUM = function( date, format ){
105
+ var d = _getDateObj( date, format ),
106
+ tmp = _getDateObj( date, format );
107
+
108
+ if( d.valid() ){
109
+ // ISO week date weeks start on monday
110
+ var dayNr = ( d.getDay() + 6 ) % 7;
111
+
112
+ // ISO 8601 states that week 1 is the week with the first thursday of that year.
113
+ tmp.setDate( d.getDate() - dayNr + 3 );
114
+
115
+ // Store the millisecond value of the tmp date
116
+ var firstThursday = tmp.valueOf();
117
+
118
+ // Set the tmp to the first thursday of the year
119
+ // First set the tmp to january first
120
+ tmp.setMonth(0, 1);
121
+
122
+ // Not a thursday? Correct the date to the next thursday
123
+ if (tmp.getDay() != 4) {
124
+ tmp.setMonth(0, 1 + ((4 - tmp.getDay()) + 7) % 7);
125
+ }
126
+
127
+ // The weeknumber is the number of weeks between the
128
+ // first thursday of the year and the thursday in the tmp week
129
+ return 1 + Math.ceil((firstThursday - tmp) / 604800000); // 604800000 = 7 * 24 * 3600 * 1000
130
+
131
+ }
132
+ return false;
133
+ };
134
+
135
+ // HOURS( datetime_string, datetime_format_string )
136
+ lib.HOURS = function( date, format ){
137
+ var d = _getDateObj( date, format );
138
+ if( d.valid() ) return d.getHours();
139
+ return false;
140
+ };
141
+
142
+ // MINUTES( datetime_string, datetime_format_string )
143
+ lib.MINUTES = function( date, format ){
144
+ var d = _getDateObj( date, format );
145
+ if( d.valid() ) return d.getMinutes();
146
+ return false;
147
+ };
148
+
149
+ // SECONDS( datetime_string, datetime_format_string )
150
+ lib.SECONDS = function( date, format ){
151
+ var d = _getDateObj( date, format );
152
+ if( d.valid() ) return d.getSeconds();
153
+ return false;
154
+ };
155
+
156
+ // NOW() Return a datetime object
157
+ lib.NOW = function(){
158
+ return _getDateObj();
159
+ };
160
+
161
+ // TODAY() Return a datetime object limited to date only
162
+ lib.TODAY = function(){
163
+ var d = _getDateObj();
164
+ d.setHours( 0 );
165
+ d.setMinutes( 0 );
166
+ d.setSeconds( 0 );
167
+ return d;
168
+ };
169
+
170
+ lib.EOMONTH = function(d,n){
171
+ n = (n || 0) + 1;
172
+ var d1 = _getDateObj(d);
173
+ d1.setMonth(d1.getMonth()+n);
174
+ d1.setDate(1);
175
+ d1.setDate(d1.getDate()-1);
176
+ return d1;
177
+ };
178
+
179
+ /*
180
+ * DATEDIFF( datetime_string, datetime_string, return_format)
181
+ *
182
+ * return_format:
183
+ * d - number of days, and remaining hours, minutes and seconds
184
+ * m - number of months, and remaining days, hours, minutes and seconds
185
+ * y - number of years, and remaining months, days, hours, minutes and seconds
186
+ *
187
+ * the function return an object with attributes: years, months and days depending of return_format argument
188
+ */
189
+ lib.DATEDIFF = function( date_one, date_two, date_format, return_format ){
190
+ var d1 = _getDateObj( date_one, date_format ),
191
+ d2 = _getDateObj( date_two, date_format ),
192
+ diff,
193
+ r = {
194
+ 'years' : -1,
195
+ 'months' : -1,
196
+ 'days' : -1,
197
+ 'hours' : -1,
198
+ 'minutes' : -1,
199
+ 'seconds' : -1
200
+ };
201
+
202
+ if( d1.valid() && d2.valid() ){
203
+ if( d1.valueOf() > d2.valueOf() ){
204
+ d2 = _getDateObj( date_one, date_format );
205
+ d1 = _getDateObj( date_two, date_format );
206
+ }
207
+
208
+ diff = d2.valueOf() - d1.valueOf();
209
+
210
+ if( typeof return_format == 'undefined' || return_format == 'd' ){
211
+ r.days = Math.floor( diff/86400000 );
212
+ }else{
213
+ var months,
214
+ days,
215
+ tmp;
216
+ months = (d2.getFullYear() - d1.getFullYear()) * 12;
217
+ months -= d1.getMonth() + 1;
218
+ months += d2.getMonth() + 1;
219
+ days = d2.getDate() - d1.getDate();
220
+ if( days < 0 ){
221
+ months--;
222
+ tmp = new Date( d1.getFullYear(), d1.getMonth()+1 );
223
+ days = ( tmp.valueOf() - d1.valueOf() )/86400000 + d2.getDate() + 1;
224
+ }
225
+
226
+ r.months = months;
227
+ r.days = Math.floor(days);
228
+
229
+ if( /y/i.test( return_format ) ){
230
+ r.years = Math.floor( months/12 );
231
+ r.months = months % 12;
232
+ }
233
+ }
234
+ r.hours = Math.floor( diff%86400000/3600000 );
235
+ r.minutes = Math.floor( diff%86400000%3600000/60000 );
236
+ r.seconds = Math.floor( diff%86400000%3600000%60000/1000);
237
+ }
238
+ return r;
239
+ };
240
+
241
+ /*
242
+ * DATETIMESUM( datetime_string, format, number, to_increase )
243
+ * to_increase:
244
+ * s - seconds
245
+ * i - minutes
246
+ * h - hours
247
+ * d - add the number of days,
248
+ * m - add the number of months,
249
+ * y - add the number of years
250
+ *
251
+ */
252
+ lib.DATETIMESUM = function( date, format, number, to_increase){
253
+ var d = _getDateObj( date, format );
254
+ if( d.valid() ){
255
+ if( typeof number != 'number' || isNaN( parseInt( number ) ) ) number = 0;
256
+ else number = parseInt( number );
257
+
258
+ if( typeof to_increase == 'undefined' ) to_increase = 'd';
259
+
260
+
261
+ if( /y+/i.test( to_increase ) ) d.setFullYear( d.getFullYear() + number );
262
+ else if( /d+/i.test( to_increase ) ) d.setDate( d.getDate() + number );
263
+ else if( /m+/i.test( to_increase ) ) d.setMonth( d.getMonth() + number );
264
+ else if( /h+/i.test( to_increase ) ) d.setHours( d.getHours() + number );
265
+ else if( /i+/i.test( to_increase ) ) d.setMinutes( d.getMinutes() + number );
266
+ else d.setSeconds( d.getSeconds() + number );
267
+
268
+ return d;
269
+ }
270
+ return false;
271
+ };
272
+
273
+ // GETDATETIMESTRING( date_object, return_format ) Return the date object as a string representation determined by the return_format argument
274
+ lib.GETDATETIMESTRING = function( date, format ){
275
+ if( typeof format == 'undefined' ) format = default_format;
276
+
277
+ if( date.valid() ){
278
+ var m = date.getMonth() + 1,
279
+ d = date.getDate(),
280
+ h = date.getHours(),
281
+ i = date.getMinutes(),
282
+ s = date.getSeconds(),
283
+ a = ( h >= 12 ) ? 'pm' : 'am';
284
+
285
+ m = ( m < 10 ) ? '0'+m : m;
286
+ d = ( d < 10 ) ? '0'+d : d;
287
+ if( /a+/.test( format ) ){
288
+ h = h % 12;
289
+ h = ( h ) ? h : 12;
290
+ }
291
+ h = ( h < 10 ) ? '0'+h : h;
292
+ i = ( i < 10 ) ? '0'+i : i;
293
+ s = ( s < 10 ) ? '0'+s : s;
294
+
295
+ return format.replace( /y+/i, date.getFullYear() )
296
+ .replace( /m+/i, m )
297
+ .replace( /d+/i, d )
298
+ .replace( /h+/i, h )
299
+ .replace( /i+/i, i )
300
+ .replace( /s+/i, s )
301
+ .replace( /a+/i, a );
302
+ }
303
+ return date;
304
+ };
305
+
306
+ root.CF_DATETIME = lib;
307
+
308
+ })(this);
js/modules/02_datetime/public/module_public.js ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ fbuilderjQuery = ( typeof fbuilderjQuery != 'undefined' ) ? fbuilderjQuery : jQuery;
2
+ fbuilderjQuery[ 'fbuilder' ] = fbuilderjQuery[ 'fbuilder' ] || {};
3
+ fbuilderjQuery[ 'fbuilder' ][ 'modules' ] = fbuilderjQuery[ 'fbuilder' ][ 'modules' ] || {};
4
+
5
+ fbuilderjQuery[ 'fbuilder' ][ 'modules' ][ 'datetime' ] = {
6
+ 'prefix' : '',
7
+ 'callback' : function()
8
+ {
9
+ fbuilderjQuery[ 'fbuilder' ][ 'extend_window' ]( fbuilderjQuery[ 'fbuilder' ][ 'modules' ][ 'datetime' ][ 'prefix' ], CF_DATETIME );
10
+ },
11
+
12
+ 'validator' : function( v )
13
+ {
14
+ if( /^\s*((\d{4}[\/\-\.]\d{1,2}[\/\-\.]\d{1,2})|(\d{1,2}[\/\-\.]\d{1,2}[\/\-\.]\d{4}))?\s*(\d{1,2}\s*:\s*\d{1,2}(\s*:\s*\d{1,2})?(\s*[ap]m)?)?\s*$/i.test( v ) )
15
+ {
16
+ return true;
17
+ }
18
+ return false;
19
+ }
20
+ };
js/modules/03_financial/admin/module_admin.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ fbuilderjQuery = (typeof fbuilderjQuery != 'undefined' ) ? fbuilderjQuery : jQuery;
2
+ fbuilderjQuery[ 'fbuilder' ] = fbuilderjQuery[ 'fbuilder' ] || {};
3
+ fbuilderjQuery[ 'fbuilder' ][ 'modules' ] = fbuilderjQuery[ 'fbuilder' ][ 'modules' ] || {};
4
+
5
+ fbuilderjQuery[ 'fbuilder' ][ 'modules' ][ 'financial' ] = {
6
+ 'tutorial' : 'https://cff.dwbooster.com/documentation#financial-module',
7
+ 'toolbars' : {
8
+ 'finance' : {
9
+ 'label' : 'Financial functions',
10
+ 'buttons' : []
11
+ }
12
+ }
13
+ };
js/modules/04_distance/admin/module_admin.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ fbuilderjQuery = (typeof fbuilderjQuery != 'undefined' ) ? fbuilderjQuery : jQuery;
2
+ fbuilderjQuery[ 'fbuilder' ] = fbuilderjQuery[ 'fbuilder' ] || {};
3
+ fbuilderjQuery[ 'fbuilder' ][ 'modules' ] = fbuilderjQuery[ 'fbuilder' ][ 'modules' ] || {};
4
+
5
+ fbuilderjQuery[ 'fbuilder' ][ 'modules' ][ 'distance' ] = {
6
+ 'tutorial' : 'https://cff.dwbooster.com/documentation#distance-module',
7
+ 'toolbars' : {
8
+ 'distance' : {
9
+ 'label' : 'Distance functions',
10
+ 'buttons' : []
11
+ }
12
+ }
13
+ };
js/modules/05_managing_fields/public/05_managing_fields.js CHANGED
@@ -14,10 +14,13 @@
14
 
15
  function _getForm(_form)
16
  {
17
- if(typeof _form == 'undefined') return '_1';
 
 
 
18
  if(/^_\d*$/.test(_form)) return _form;
19
  if(/^\d*$/.test(_form)) return '_'+_form;
20
- return $(_form).find('[name="cp_calculatedfieldsf_pform_psequence"]').val();
21
  }
22
 
23
  function _getField( _field, _form )
14
 
15
  function _getForm(_form)
16
  {
17
+ if(typeof _form == 'undefined'){
18
+ if('currentFormId' in fbuilderjQuery.fbuilder) _form = fbuilderjQuery.fbuilder.currentFormId;
19
+ else return '_1';
20
+ }
21
  if(/^_\d*$/.test(_form)) return _form;
22
  if(/^\d*$/.test(_form)) return '_'+_form;
23
+ return $((typeof _form == 'object') ? _form : '#'+_form).find('[name="cp_calculatedfieldsf_pform_psequence"]').val();
24
  }
25
 
26
  function _getField( _field, _form )
js/modules/07_chart/admin/module_admin.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ fbuilderjQuery = (typeof fbuilderjQuery != 'undefined' ) ? fbuilderjQuery : jQuery;
2
+ fbuilderjQuery[ 'fbuilder' ] = fbuilderjQuery[ 'fbuilder' ] || {};
3
+ fbuilderjQuery[ 'fbuilder' ][ 'modules' ] = fbuilderjQuery[ 'fbuilder' ][ 'modules' ] || {};
4
+
5
+ fbuilderjQuery[ 'fbuilder' ][ 'modules' ][ 'chart' ] = {
6
+ 'tutorial' : 'https://cff.dwbooster.com/documentation#chart-module',
7
+ 'toolbars' : {
8
+ 'chart' : {
9
+ 'label' : 'Chart.js Integration',
10
+ 'buttons' : []
11
+ }
12
+ }
13
+ };
js/modules/08_url/admin/module_admin.js CHANGED
@@ -38,6 +38,11 @@ fbuilderjQuery[ 'fbuilder' ][ 'modules' ][ 'url' ] = {
38
  "code" : "getURLParameter(",
39
  "tip" : "<p>Returns the value of an URL parameter. The operation accepts two parameters: the parameter name and the dafault value. The default value would be returned if the URL parameter does not exist. If not default value is passed as parameter, and the URL parameter does not exist, the operation returns null. <strong>getURLParameter(parameter_name, default_value)</strong> the default_value is optional.</p>"
40
  },
 
 
 
 
 
41
  {
42
  "value" : "generateURL",
43
  "code" : "generateURL(",
38
  "code" : "getURLParameter(",
39
  "tip" : "<p>Returns the value of an URL parameter. The operation accepts two parameters: the parameter name and the dafault value. The default value would be returned if the URL parameter does not exist. If not default value is passed as parameter, and the URL parameter does not exist, the operation returns null. <strong>getURLParameter(parameter_name, default_value)</strong> the default_value is optional.</p>"
40
  },
41
+ {
42
+ "value" : "getReferrer",
43
+ "code" : "getReferrer()",
44
+ "tip" : "<p>Returns the referrer URL or null.</p>"
45
+ },
46
  {
47
  "value" : "generateURL",
48
  "code" : "generateURL(",
js/modules/08_url/public/01_url.js CHANGED
@@ -16,6 +16,11 @@
16
 
17
  lib.cff_url_version = '0.1';
18
 
 
 
 
 
 
19
  // generateURL()
20
  lib.generateURL = lib.generateurl = lib.GENERATEURL = function(url, params, hash){
21
  var urlComponents = url.split('#'), queryString = '', connector = '';
16
 
17
  lib.cff_url_version = '0.1';
18
 
19
+ // getReferrer()
20
+ lib.getReferrer = lib.getreferrer = lib.GETREFERRER = function(){
21
+ return document.referrer || null;
22
+ };
23
+
24
  // generateURL()
25
  lib.generateURL = lib.generateurl = lib.GENERATEURL = function(url, params, hash){
26
  var urlComponents = url.split('#'), queryString = '', connector = '';
languages/calculated-fields-form-en_US.mo CHANGED
Binary file
languages/calculated-fields-form-en_US.po CHANGED
@@ -1,15 +1,15 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: \n"
4
- "POT-Creation-Date: 2021-05-03 16:03+0200\n"
5
- "PO-Revision-Date: 2021-05-03 16:03+0200\n"
6
  "Last-Translator: CodePeople\n"
7
  "Language-Team: \n"
8
  "Language: en_US\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 2.4.3\n"
13
  "X-Poedit-Basepath: ..\n"
14
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
  "X-Poedit-KeywordsList: __;_e;esc_attr__;esc_attr_e\n"
@@ -42,7 +42,7 @@ msgid "Settings saved"
42
  msgstr ""
43
 
44
  #: inc/cpcff_admin_int.inc.php:50 inc/cpcff_admin_int_list.inc.php:100
45
- #: inc/cpcff_page_builders.inc.php:155
46
  #: pagebuilders/beaverbuilder/cff/cff/cff.php:9
47
  #: pagebuilders/beaverbuilder/cff/cff/cff.php:11
48
  #: pagebuilders/beaverbuilder/cff/cff/cff.php:12
@@ -87,7 +87,7 @@ msgid "Select a revision"
87
  msgstr ""
88
 
89
  #: inc/cpcff_admin_int.inc.php:91 inc/cpcff_admin_int.inc.php:212
90
- #: inc/cpcff_admin_int.inc.php:579
91
  msgid "Preview"
92
  msgstr ""
93
 
@@ -102,9 +102,9 @@ msgstr ""
102
  #: inc/cpcff_admin_int.inc.php:102
103
  msgid ""
104
  "If you need also the form to be sent to the server side for processing (for "
105
- "example to deliver emails) then the <a href=\"https://cff.dwbooster.com/\" "
106
- "target=\"_blank\">Professional or Developer versions</a> of the plugin will "
107
- "be required."
108
  msgstr ""
109
 
110
  #: inc/cpcff_admin_int.inc.php:118
@@ -127,8 +127,8 @@ msgstr ""
127
  msgid "Field Settings"
128
  msgstr ""
129
 
130
- #: inc/cpcff_admin_int.inc.php:211 inc/cpcff_admin_int.inc.php:323
131
- #: inc/cpcff_admin_int.inc.php:621
132
  msgid "Save Changes"
133
  msgstr ""
134
 
@@ -136,383 +136,418 @@ msgstr ""
136
  msgid "Generate revisions in the form preview as well"
137
  msgstr ""
138
 
 
 
 
 
139
  #: inc/cpcff_admin_int.inc.php:217
140
- msgid "Define Texts"
 
 
 
 
 
 
 
 
 
 
 
 
141
  msgstr ""
142
 
143
  #: inc/cpcff_admin_int.inc.php:221
144
- msgid "Previous button label (text)"
 
 
 
 
145
  msgstr ""
146
 
147
  #: inc/cpcff_admin_int.inc.php:225
 
 
 
 
 
 
 
 
148
  msgid "Next button label (text)"
149
  msgstr ""
150
 
151
- #: inc/cpcff_admin_int.inc.php:230
152
  msgid ""
153
  "- The styles can be applied into any of the CSS files of your theme or into "
154
  "the CSS file <em>\"calculated-fields-form\\css\\stylepublic.css\"</em>."
155
  msgstr ""
156
 
157
- #: inc/cpcff_admin_int.inc.php:231
158
  msgid ""
159
  "- For general CSS styles modifications to the form and samples <a href="
160
  "\"https://cff.dwbooster.com/faq#q82\" target=\"_blank\">check this FAQ</a>."
161
  msgstr ""
162
 
163
- #: inc/cpcff_admin_int.inc.php:253
 
 
 
 
 
 
 
164
  msgid "Validation Settings"
165
  msgstr ""
166
 
167
- #: inc/cpcff_admin_int.inc.php:257
168
  msgid "\"is required\" text"
169
  msgstr ""
170
 
171
- #: inc/cpcff_admin_int.inc.php:261
172
  msgid "\"is email\" text"
173
  msgstr ""
174
 
175
- #: inc/cpcff_admin_int.inc.php:265
176
  msgid "\"is valid captcha\" text"
177
  msgstr ""
178
 
179
- #: inc/cpcff_admin_int.inc.php:270
180
  msgid "\"is valid date (mm/dd/yyyy)\" text"
181
  msgstr ""
182
 
183
- #: inc/cpcff_admin_int.inc.php:274
184
  msgid "\"is valid date (dd/mm/yyyy)\" text"
185
  msgstr ""
186
 
187
- #: inc/cpcff_admin_int.inc.php:278
188
  msgid "\"is number\" text"
189
  msgstr ""
190
 
191
- #: inc/cpcff_admin_int.inc.php:282
192
  msgid "\"only digits\" text"
193
  msgstr ""
194
 
195
- #: inc/cpcff_admin_int.inc.php:286
196
  msgid "\"under maximum\" text"
197
  msgstr ""
198
 
199
- #: inc/cpcff_admin_int.inc.php:290
200
  msgid "\"over minimum\" text"
201
  msgstr ""
202
 
203
- #: inc/cpcff_admin_int.inc.php:313
204
  msgid "Note"
205
  msgstr ""
206
 
207
- #: inc/cpcff_admin_int.inc.php:315
208
  msgid "To insert this form in a post/page, use the dedicated icon"
209
  msgstr ""
210
 
211
- #: inc/cpcff_admin_int.inc.php:316 inc/cpcff_main.inc.php:238
212
  msgid "Insert Calculated Fields Form"
213
  msgstr ""
214
 
215
- #: inc/cpcff_admin_int.inc.php:317
216
  msgid ""
217
  "which has been added to your Upload/Insert Menu, just below the title of "
218
  "your Post/Page."
219
  msgstr ""
220
 
221
- #: inc/cpcff_admin_int.inc.php:326 inc/cpcff_admin_int.inc.php:624
222
- #: inc/cpcff_admin_int_list.inc.php:269
223
  msgid "Request Custom Modifications"
224
  msgstr ""
225
 
226
- #: inc/cpcff_admin_int.inc.php:326 inc/cpcff_admin_int.inc.php:624
227
- #: inc/cpcff_admin_int_list.inc.php:269 inc/cpcff_main.inc.php:221
228
  msgid "Help"
229
  msgstr ""
230
 
231
- #: inc/cpcff_admin_int.inc.php:330
232
  msgid ""
233
  "The following settings are available only in the <a href=\"https://cff."
234
- "dwbooster.com/\">pro version</a>"
235
  msgstr ""
236
 
237
- #: inc/cpcff_admin_int.inc.php:332
238
  msgid "Form Processing and Payment Settings"
239
  msgstr ""
240
 
241
- #: inc/cpcff_admin_int.inc.php:336
242
  msgid "Payment Settings"
243
  msgstr ""
244
 
245
- #: inc/cpcff_admin_int.inc.php:341
246
  msgid "Request cost"
247
  msgstr ""
248
 
249
- #: inc/cpcff_admin_int.inc.php:346
250
  msgid "Currency"
251
  msgstr ""
252
 
253
- #: inc/cpcff_admin_int.inc.php:351
254
  msgid "Base amount"
255
  msgstr ""
256
 
257
- #: inc/cpcff_admin_int.inc.php:352
258
  msgid ""
259
  "Minimum amount to charge. If the final price is lesser than this number, the "
260
  "base amount will be applied."
261
  msgstr ""
262
 
263
- #: inc/cpcff_admin_int.inc.php:357
264
  msgid "Paypal product name"
265
  msgstr ""
266
 
267
- #: inc/cpcff_admin_int.inc.php:362
268
  msgid "Discount Codes"
269
  msgstr ""
270
 
271
- #: inc/cpcff_admin_int.inc.php:364
272
  msgid "This feature isn't available in this version."
273
  msgstr ""
274
 
275
- #: inc/cpcff_admin_int.inc.php:367
276
  msgid "Add new discount code"
277
  msgstr ""
278
 
279
- #: inc/cpcff_admin_int.inc.php:369
280
  msgid "Code"
281
  msgstr ""
282
 
283
- #: inc/cpcff_admin_int.inc.php:370
284
  msgid "Discount"
285
  msgstr ""
286
 
287
- #: inc/cpcff_admin_int.inc.php:371
288
  msgid "Percent"
289
  msgstr ""
290
 
291
- #: inc/cpcff_admin_int.inc.php:372
292
  msgid "Fixed Value"
293
  msgstr ""
294
 
295
- #: inc/cpcff_admin_int.inc.php:375
296
  msgid "Valid until"
297
  msgstr ""
298
 
299
- #: inc/cpcff_admin_int.inc.php:376 inc/cpcff_admin_int_list.inc.php:211
300
  msgid "Add"
301
  msgstr ""
302
 
303
- #: inc/cpcff_admin_int.inc.php:378
304
  msgid "Note: Expiration date based in server time. Server time now is"
305
  msgstr ""
306
 
307
- #: inc/cpcff_admin_int.inc.php:386
308
  msgid "Paypal Payment Configuration"
309
  msgstr ""
310
 
311
- #: inc/cpcff_admin_int.inc.php:391
312
  msgid "Enable Paypal Payments?"
313
  msgstr ""
314
 
315
- #: inc/cpcff_admin_int.inc.php:393 inc/cpcff_admin_int.inc.php:481
316
- #: inc/cpcff_admin_int.inc.php:518 inc/cpcff_admin_int.inc.php:559
317
  msgid "No"
318
  msgstr ""
319
 
320
- #: inc/cpcff_admin_int.inc.php:395
321
  msgid ""
322
  "Note: If \"Optional\" is selected, a radiobutton will appear in the form to "
323
  "select if the payment will be made with PayPal or not."
324
  msgstr ""
325
 
326
- #: inc/cpcff_admin_int.inc.php:397
327
  msgid "Label for the \"<strong>Pay with PayPal</strong>\" option"
328
  msgstr ""
329
 
330
- #: inc/cpcff_admin_int.inc.php:403
331
  msgid "Paypal Mode"
332
  msgstr ""
333
 
334
- #: inc/cpcff_admin_int.inc.php:405
335
  msgid "Production - real payments processed"
336
  msgstr ""
337
 
338
- #: inc/cpcff_admin_int.inc.php:406
339
  msgid "SandBox - PayPal testing sandbox area"
340
  msgstr ""
341
 
342
- #: inc/cpcff_admin_int.inc.php:412
343
  msgid "Paypal email"
344
  msgstr ""
345
 
346
- #: inc/cpcff_admin_int.inc.php:417
347
  msgid "A $0 amount to pay means"
348
  msgstr ""
349
 
350
- #: inc/cpcff_admin_int.inc.php:419
351
  msgid "Let the user enter any amount at PayPal (ex: for a donation)"
352
  msgstr ""
353
 
354
- #: inc/cpcff_admin_int.inc.php:420
355
  msgid "Don't require any payment. Form is submitted skiping the PayPal page."
356
  msgstr ""
357
 
358
- #: inc/cpcff_admin_int.inc.php:426
359
  msgid "Paypal language"
360
  msgstr ""
361
 
362
- #: inc/cpcff_admin_int.inc.php:431
363
  msgid "Payment frequency"
364
  msgstr ""
365
 
366
- #: inc/cpcff_admin_int.inc.php:435
367
  msgid "One time payment (default option, user is billed only once)"
368
  msgstr ""
369
 
370
- #: inc/cpcff_admin_int.inc.php:436
371
  msgid "Bill the user every 1 month"
372
  msgstr ""
373
 
374
- #: inc/cpcff_admin_int.inc.php:437
375
  msgid "Bill the user every 3 months"
376
  msgstr ""
377
 
378
- #: inc/cpcff_admin_int.inc.php:438
379
  msgid "Bill the user every 6 months"
380
  msgstr ""
381
 
382
- #: inc/cpcff_admin_int.inc.php:439
383
  msgid "Bill the user every 12 months"
384
  msgstr ""
385
 
386
- #: inc/cpcff_admin_int.inc.php:444
387
  msgid "Paypal prompt buyers for shipping address"
388
  msgstr ""
389
 
390
- #: inc/cpcff_admin_int.inc.php:448
391
  msgid "Do not prompt for an address"
392
  msgstr ""
393
 
394
- #: inc/cpcff_admin_int.inc.php:449
395
  msgid "Prompt for an address, but do not require one"
396
  msgstr ""
397
 
398
- #: inc/cpcff_admin_int.inc.php:450
399
  msgid "Prompt for an address and require one"
400
  msgstr ""
401
 
402
- #: inc/cpcff_admin_int.inc.php:460
403
  msgid "Form Processing / Email Settings"
404
  msgstr ""
405
 
406
- #: inc/cpcff_admin_int.inc.php:464
407
  msgid "\"From\" email"
408
  msgstr ""
409
 
410
- #: inc/cpcff_admin_int.inc.php:465
411
  msgid ""
412
  "This email is required if the \"From fixed email address\" option is "
413
  "selected, or it is enabled the email copy to the user."
414
  msgstr ""
415
 
416
- #: inc/cpcff_admin_int.inc.php:468
417
  msgid "Destination emails (comma separated)"
418
  msgstr ""
419
 
420
- #: inc/cpcff_admin_int.inc.php:472 inc/cpcff_admin_int.inc.php:527
421
  msgid "Email subject"
422
  msgstr ""
423
 
424
- #: inc/cpcff_admin_int.inc.php:476
425
  msgid "Include additional information?"
426
  msgstr ""
427
 
428
- #: inc/cpcff_admin_int.inc.php:480 inc/cpcff_admin_int.inc.php:517
429
- #: inc/cpcff_admin_int.inc.php:558
430
  msgid "Yes"
431
  msgstr ""
432
 
433
- #: inc/cpcff_admin_int.inc.php:482
434
  msgid ""
435
  "If the \"No\" option is selected the plugin won't capture the IP address of "
436
  "users."
437
  msgstr ""
438
 
439
- #: inc/cpcff_admin_int.inc.php:486
440
  msgid "Thank you page (after sending the message)"
441
  msgstr ""
442
 
443
- #: inc/cpcff_admin_int.inc.php:490 inc/cpcff_admin_int.inc.php:531
444
  msgid "Email format?"
445
  msgstr ""
446
 
447
- #: inc/cpcff_admin_int.inc.php:494 inc/cpcff_admin_int.inc.php:535
448
  msgid "Plain Text (default)"
449
  msgstr ""
450
 
451
- #: inc/cpcff_admin_int.inc.php:495 inc/cpcff_admin_int.inc.php:536
452
  msgid "HTML (use html in the textarea below)"
453
  msgstr ""
454
 
455
- #: inc/cpcff_admin_int.inc.php:500 inc/cpcff_admin_int.inc.php:541
456
  msgid "Message"
457
  msgstr ""
458
 
459
- #: inc/cpcff_admin_int.inc.php:509
460
  msgid "Email Copy to User"
461
  msgstr ""
462
 
463
- #: inc/cpcff_admin_int.inc.php:513
464
  msgid "Send confirmation/thank you message to user?"
465
  msgstr ""
466
 
467
- #: inc/cpcff_admin_int.inc.php:523
468
  msgid "Email field on the form"
469
  msgstr ""
470
 
471
- #: inc/cpcff_admin_int.inc.php:550
472
  msgid "Captcha Verification"
473
  msgstr ""
474
 
475
- #: inc/cpcff_admin_int.inc.php:554
476
  msgid "Use Captcha Verification?"
477
  msgstr ""
478
 
479
- #: inc/cpcff_admin_int.inc.php:565
480
  msgid "Width"
481
  msgstr ""
482
 
483
- #: inc/cpcff_admin_int.inc.php:567
484
  msgid "Height"
485
  msgstr ""
486
 
487
- #: inc/cpcff_admin_int.inc.php:569
488
  msgid "Chars"
489
  msgstr ""
490
 
491
- #: inc/cpcff_admin_int.inc.php:574
492
  msgid "Min font size"
493
  msgstr ""
494
 
495
- #: inc/cpcff_admin_int.inc.php:576
496
  msgid "Max font size"
497
  msgstr ""
498
 
499
- #: inc/cpcff_admin_int.inc.php:581
500
  msgid "security code"
501
  msgstr ""
502
 
503
- #: inc/cpcff_admin_int.inc.php:587
504
  msgid "Noise"
505
  msgstr ""
506
 
507
- #: inc/cpcff_admin_int.inc.php:589
508
  msgid "Noise Length"
509
  msgstr ""
510
 
511
- #: inc/cpcff_admin_int.inc.php:594
512
  msgid "Background"
513
  msgstr ""
514
 
515
- #: inc/cpcff_admin_int.inc.php:601
516
  msgid "Font"
517
  msgstr ""
518
 
@@ -682,15 +717,15 @@ msgstr ""
682
  msgid "Do not load the forms with crawlers"
683
  msgstr ""
684
 
685
- #: inc/cpcff_admin_int_list.inc.php:260
686
  msgid "* The forms are not loaded when website is being indexed by searchers."
687
  msgstr ""
688
 
689
- #: inc/cpcff_admin_int_list.inc.php:262
690
  msgid "UPDATE"
691
  msgstr ""
692
 
693
- #: inc/cpcff_admin_int_list.inc.php:269 inc/cpcff_main.inc.php:220
694
  msgid "Upgrade"
695
  msgstr ""
696
 
@@ -750,34 +785,41 @@ msgstr ""
750
  msgid "Create a JavaScript var from POST, GET, SESSION, or COOKIE var"
751
  msgstr ""
752
 
753
- #: inc/cpcff_page_builders.inc.php:95
754
  #: pagebuilders/elementor/elementor.pb.php:59
755
  msgid "Select a form"
756
  msgstr ""
757
 
758
- #: inc/cpcff_page_builders.inc.php:96
759
  msgid "Forms"
760
  msgstr ""
761
 
762
- #: inc/cpcff_page_builders.inc.php:97
763
- #: pagebuilders/beaverbuilder/cff/cff.inc.php:37
764
  #: pagebuilders/elementor/elementor.pb.php:70
765
  msgid "Additional attributes"
766
  msgstr ""
767
 
768
- #: pagebuilders/beaverbuilder/cff/cff.inc.php:20
 
 
 
 
 
 
 
769
  msgid "Select the form and enter the additional attributes"
770
  msgstr ""
771
 
772
- #: pagebuilders/beaverbuilder/cff/cff.inc.php:23
773
  msgid "Form information"
774
  msgstr ""
775
 
776
- #: pagebuilders/beaverbuilder/cff/cff.inc.php:27
777
  msgid "Select form"
778
  msgstr ""
779
 
780
- #: pagebuilders/beaverbuilder/cff/cff.inc.php:33
781
  msgid "Class name"
782
  msgstr ""
783
 
@@ -834,15 +876,15 @@ msgstr ""
834
  msgid "Create javascript variable"
835
  msgstr ""
836
 
837
- #: pagebuilders/elementor/elementor.pb.php:166
838
  msgid "Variable Shortcode"
839
  msgstr ""
840
 
841
- #: pagebuilders/elementor/elementor.pb.php:173
842
  msgid "Variable shortcode"
843
  msgstr ""
844
 
845
- #: pagebuilders/elementor/elementor.pb.php:178
846
  msgid "I need help [+]"
847
  msgstr ""
848
 
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: \n"
4
+ "POT-Creation-Date: 2021-07-04 01:10+0200\n"
5
+ "PO-Revision-Date: 2021-07-04 01:10+0200\n"
6
  "Last-Translator: CodePeople\n"
7
  "Language-Team: \n"
8
  "Language: en_US\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 3.0\n"
13
  "X-Poedit-Basepath: ..\n"
14
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
  "X-Poedit-KeywordsList: __;_e;esc_attr__;esc_attr_e\n"
42
  msgstr ""
43
 
44
  #: inc/cpcff_admin_int.inc.php:50 inc/cpcff_admin_int_list.inc.php:100
45
+ #: inc/cpcff_page_builders.inc.php:171
46
  #: pagebuilders/beaverbuilder/cff/cff/cff.php:9
47
  #: pagebuilders/beaverbuilder/cff/cff/cff.php:11
48
  #: pagebuilders/beaverbuilder/cff/cff/cff.php:12
87
  msgstr ""
88
 
89
  #: inc/cpcff_admin_int.inc.php:91 inc/cpcff_admin_int.inc.php:212
90
+ #: inc/cpcff_admin_int.inc.php:591
91
  msgid "Preview"
92
  msgstr ""
93
 
102
  #: inc/cpcff_admin_int.inc.php:102
103
  msgid ""
104
  "If you need also the form to be sent to the server side for processing (for "
105
+ "example to deliver emails) then the <a href=\"https://cff.dwbooster.com/"
106
+ "download\" target=\"_blank\">Commercial versions</a> of the plugin are "
107
+ "required."
108
  msgstr ""
109
 
110
  #: inc/cpcff_admin_int.inc.php:118
127
  msgid "Field Settings"
128
  msgstr ""
129
 
130
+ #: inc/cpcff_admin_int.inc.php:211 inc/cpcff_admin_int.inc.php:333
131
+ #: inc/cpcff_admin_int.inc.php:635
132
  msgid "Save Changes"
133
  msgstr ""
134
 
136
  msgid "Generate revisions in the form preview as well"
137
  msgstr ""
138
 
139
+ #: inc/cpcff_admin_int.inc.php:216
140
+ msgid "Texts definition"
141
+ msgstr ""
142
+
143
  #: inc/cpcff_admin_int.inc.php:217
144
+ msgid "Error texts"
145
+ msgstr ""
146
+
147
+ #: inc/cpcff_admin_int.inc.php:218
148
+ msgid "General payment settings"
149
+ msgstr ""
150
+
151
+ #: inc/cpcff_admin_int.inc.php:219
152
+ msgid "PayPal integration"
153
+ msgstr ""
154
+
155
+ #: inc/cpcff_admin_int.inc.php:220
156
+ msgid "Notification email"
157
  msgstr ""
158
 
159
  #: inc/cpcff_admin_int.inc.php:221
160
+ msgid "Email copy to user"
161
+ msgstr ""
162
+
163
+ #: inc/cpcff_admin_int.inc.php:222
164
+ msgid "Captcha settings"
165
  msgstr ""
166
 
167
  #: inc/cpcff_admin_int.inc.php:225
168
+ msgid "Define Texts"
169
+ msgstr ""
170
+
171
+ #: inc/cpcff_admin_int.inc.php:229
172
+ msgid "Previous button label (text)"
173
+ msgstr ""
174
+
175
+ #: inc/cpcff_admin_int.inc.php:233
176
  msgid "Next button label (text)"
177
  msgstr ""
178
 
179
+ #: inc/cpcff_admin_int.inc.php:238
180
  msgid ""
181
  "- The styles can be applied into any of the CSS files of your theme or into "
182
  "the CSS file <em>\"calculated-fields-form\\css\\stylepublic.css\"</em>."
183
  msgstr ""
184
 
185
+ #: inc/cpcff_admin_int.inc.php:239
186
  msgid ""
187
  "- For general CSS styles modifications to the form and samples <a href="
188
  "\"https://cff.dwbooster.com/faq#q82\" target=\"_blank\">check this FAQ</a>."
189
  msgstr ""
190
 
191
+ #: inc/cpcff_admin_int.inc.php:257 inc/cpcff_admin_int.inc.php:318
192
+ #: inc/cpcff_admin_int.inc.php:392 inc/cpcff_admin_int.inc.php:466
193
+ #: inc/cpcff_admin_int.inc.php:515 inc/cpcff_admin_int.inc.php:557
194
+ #: inc/cpcff_admin_int.inc.php:624
195
+ msgid "Up to form structure"
196
+ msgstr ""
197
+
198
+ #: inc/cpcff_admin_int.inc.php:262
199
  msgid "Validation Settings"
200
  msgstr ""
201
 
202
+ #: inc/cpcff_admin_int.inc.php:266
203
  msgid "\"is required\" text"
204
  msgstr ""
205
 
206
+ #: inc/cpcff_admin_int.inc.php:270
207
  msgid "\"is email\" text"
208
  msgstr ""
209
 
210
+ #: inc/cpcff_admin_int.inc.php:274
211
  msgid "\"is valid captcha\" text"
212
  msgstr ""
213
 
214
+ #: inc/cpcff_admin_int.inc.php:279
215
  msgid "\"is valid date (mm/dd/yyyy)\" text"
216
  msgstr ""
217
 
218
+ #: inc/cpcff_admin_int.inc.php:283
219
  msgid "\"is valid date (dd/mm/yyyy)\" text"
220
  msgstr ""
221
 
222
+ #: inc/cpcff_admin_int.inc.php:287
223
  msgid "\"is number\" text"
224
  msgstr ""
225
 
226
+ #: inc/cpcff_admin_int.inc.php:291
227
  msgid "\"only digits\" text"
228
  msgstr ""
229
 
230
+ #: inc/cpcff_admin_int.inc.php:295
231
  msgid "\"under maximum\" text"
232
  msgstr ""
233
 
234
+ #: inc/cpcff_admin_int.inc.php:299
235
  msgid "\"over minimum\" text"
236
  msgstr ""
237
 
238
+ #: inc/cpcff_admin_int.inc.php:323
239
  msgid "Note"
240
  msgstr ""
241
 
242
+ #: inc/cpcff_admin_int.inc.php:325
243
  msgid "To insert this form in a post/page, use the dedicated icon"
244
  msgstr ""
245
 
246
+ #: inc/cpcff_admin_int.inc.php:326 inc/cpcff_main.inc.php:238
247
  msgid "Insert Calculated Fields Form"
248
  msgstr ""
249
 
250
+ #: inc/cpcff_admin_int.inc.php:327
251
  msgid ""
252
  "which has been added to your Upload/Insert Menu, just below the title of "
253
  "your Post/Page."
254
  msgstr ""
255
 
256
+ #: inc/cpcff_admin_int.inc.php:336 inc/cpcff_admin_int.inc.php:638
257
+ #: inc/cpcff_admin_int_list.inc.php:270
258
  msgid "Request Custom Modifications"
259
  msgstr ""
260
 
261
+ #: inc/cpcff_admin_int.inc.php:336 inc/cpcff_admin_int.inc.php:638
262
+ #: inc/cpcff_admin_int_list.inc.php:270 inc/cpcff_main.inc.php:221
263
  msgid "Help"
264
  msgstr ""
265
 
266
+ #: inc/cpcff_admin_int.inc.php:340
267
  msgid ""
268
  "The following settings are available only in the <a href=\"https://cff."
269
+ "dwbooster.com/download\" target=\"_blank\">Commercial versions</a>"
270
  msgstr ""
271
 
272
+ #: inc/cpcff_admin_int.inc.php:342
273
  msgid "Form Processing and Payment Settings"
274
  msgstr ""
275
 
276
+ #: inc/cpcff_admin_int.inc.php:346
277
  msgid "Payment Settings"
278
  msgstr ""
279
 
280
+ #: inc/cpcff_admin_int.inc.php:351
281
  msgid "Request cost"
282
  msgstr ""
283
 
284
+ #: inc/cpcff_admin_int.inc.php:356
285
  msgid "Currency"
286
  msgstr ""
287
 
288
+ #: inc/cpcff_admin_int.inc.php:361
289
  msgid "Base amount"
290
  msgstr ""
291
 
292
+ #: inc/cpcff_admin_int.inc.php:362
293
  msgid ""
294
  "Minimum amount to charge. If the final price is lesser than this number, the "
295
  "base amount will be applied."
296
  msgstr ""
297
 
298
+ #: inc/cpcff_admin_int.inc.php:367
299
  msgid "Paypal product name"
300
  msgstr ""
301
 
302
+ #: inc/cpcff_admin_int.inc.php:372
303
  msgid "Discount Codes"
304
  msgstr ""
305
 
306
+ #: inc/cpcff_admin_int.inc.php:374
307
  msgid "This feature isn't available in this version."
308
  msgstr ""
309
 
310
+ #: inc/cpcff_admin_int.inc.php:377
311
  msgid "Add new discount code"
312
  msgstr ""
313
 
314
+ #: inc/cpcff_admin_int.inc.php:379
315
  msgid "Code"
316
  msgstr ""
317
 
318
+ #: inc/cpcff_admin_int.inc.php:380
319
  msgid "Discount"
320
  msgstr ""
321
 
322
+ #: inc/cpcff_admin_int.inc.php:381
323
  msgid "Percent"
324
  msgstr ""
325
 
326
+ #: inc/cpcff_admin_int.inc.php:382
327
  msgid "Fixed Value"
328
  msgstr ""
329
 
330
+ #: inc/cpcff_admin_int.inc.php:385
331
  msgid "Valid until"
332
  msgstr ""
333
 
334
+ #: inc/cpcff_admin_int.inc.php:386 inc/cpcff_admin_int_list.inc.php:211
335
  msgid "Add"
336
  msgstr ""
337
 
338
+ #: inc/cpcff_admin_int.inc.php:388
339
  msgid "Note: Expiration date based in server time. Server time now is"
340
  msgstr ""
341
 
342
+ #: inc/cpcff_admin_int.inc.php:397
343
  msgid "Paypal Payment Configuration"
344
  msgstr ""
345
 
346
+ #: inc/cpcff_admin_int.inc.php:402
347
  msgid "Enable Paypal Payments?"
348
  msgstr ""
349
 
350
+ #: inc/cpcff_admin_int.inc.php:404 inc/cpcff_admin_int.inc.php:492
351
+ #: inc/cpcff_admin_int.inc.php:530 inc/cpcff_admin_int.inc.php:571
352
  msgid "No"
353
  msgstr ""
354
 
355
+ #: inc/cpcff_admin_int.inc.php:406
356
  msgid ""
357
  "Note: If \"Optional\" is selected, a radiobutton will appear in the form to "
358
  "select if the payment will be made with PayPal or not."
359
  msgstr ""
360
 
361
+ #: inc/cpcff_admin_int.inc.php:408
362
  msgid "Label for the \"<strong>Pay with PayPal</strong>\" option"
363
  msgstr ""
364
 
365
+ #: inc/cpcff_admin_int.inc.php:414
366
  msgid "Paypal Mode"
367
  msgstr ""
368
 
369
+ #: inc/cpcff_admin_int.inc.php:416
370
  msgid "Production - real payments processed"
371
  msgstr ""
372
 
373
+ #: inc/cpcff_admin_int.inc.php:417
374
  msgid "SandBox - PayPal testing sandbox area"
375
  msgstr ""
376
 
377
+ #: inc/cpcff_admin_int.inc.php:423
378
  msgid "Paypal email"
379
  msgstr ""
380
 
381
+ #: inc/cpcff_admin_int.inc.php:428
382
  msgid "A $0 amount to pay means"
383
  msgstr ""
384
 
385
+ #: inc/cpcff_admin_int.inc.php:430
386
  msgid "Let the user enter any amount at PayPal (ex: for a donation)"
387
  msgstr ""
388
 
389
+ #: inc/cpcff_admin_int.inc.php:431
390
  msgid "Don't require any payment. Form is submitted skiping the PayPal page."
391
  msgstr ""
392
 
393
+ #: inc/cpcff_admin_int.inc.php:437
394
  msgid "Paypal language"
395
  msgstr ""
396
 
397
+ #: inc/cpcff_admin_int.inc.php:442
398
  msgid "Payment frequency"
399
  msgstr ""
400
 
401
+ #: inc/cpcff_admin_int.inc.php:446
402
  msgid "One time payment (default option, user is billed only once)"
403
  msgstr ""
404
 
405
+ #: inc/cpcff_admin_int.inc.php:447
406
  msgid "Bill the user every 1 month"
407
  msgstr ""
408
 
409
+ #: inc/cpcff_admin_int.inc.php:448
410
  msgid "Bill the user every 3 months"
411
  msgstr ""
412
 
413
+ #: inc/cpcff_admin_int.inc.php:449
414
  msgid "Bill the user every 6 months"
415
  msgstr ""
416
 
417
+ #: inc/cpcff_admin_int.inc.php:450
418
  msgid "Bill the user every 12 months"
419
  msgstr ""
420
 
421
+ #: inc/cpcff_admin_int.inc.php:455
422
  msgid "Paypal prompt buyers for shipping address"
423
  msgstr ""
424
 
425
+ #: inc/cpcff_admin_int.inc.php:459
426
  msgid "Do not prompt for an address"
427
  msgstr ""
428
 
429
+ #: inc/cpcff_admin_int.inc.php:460
430
  msgid "Prompt for an address, but do not require one"
431
  msgstr ""
432
 
433
+ #: inc/cpcff_admin_int.inc.php:461
434
  msgid "Prompt for an address and require one"
435
  msgstr ""
436
 
437
+ #: inc/cpcff_admin_int.inc.php:471
438
  msgid "Form Processing / Email Settings"
439
  msgstr ""
440
 
441
+ #: inc/cpcff_admin_int.inc.php:475
442
  msgid "\"From\" email"
443
  msgstr ""
444
 
445
+ #: inc/cpcff_admin_int.inc.php:476
446
  msgid ""
447
  "This email is required if the \"From fixed email address\" option is "
448
  "selected, or it is enabled the email copy to the user."
449
  msgstr ""
450
 
451
+ #: inc/cpcff_admin_int.inc.php:479
452
  msgid "Destination emails (comma separated)"
453
  msgstr ""
454
 
455
+ #: inc/cpcff_admin_int.inc.php:483 inc/cpcff_admin_int.inc.php:539
456
  msgid "Email subject"
457
  msgstr ""
458
 
459
+ #: inc/cpcff_admin_int.inc.php:487
460
  msgid "Include additional information?"
461
  msgstr ""
462
 
463
+ #: inc/cpcff_admin_int.inc.php:491 inc/cpcff_admin_int.inc.php:529
464
+ #: inc/cpcff_admin_int.inc.php:570
465
  msgid "Yes"
466
  msgstr ""
467
 
468
+ #: inc/cpcff_admin_int.inc.php:493
469
  msgid ""
470
  "If the \"No\" option is selected the plugin won't capture the IP address of "
471
  "users."
472
  msgstr ""
473
 
474
+ #: inc/cpcff_admin_int.inc.php:497
475
  msgid "Thank you page (after sending the message)"
476
  msgstr ""
477
 
478
+ #: inc/cpcff_admin_int.inc.php:501 inc/cpcff_admin_int.inc.php:543
479
  msgid "Email format?"
480
  msgstr ""
481
 
482
+ #: inc/cpcff_admin_int.inc.php:505 inc/cpcff_admin_int.inc.php:547
483
  msgid "Plain Text (default)"
484
  msgstr ""
485
 
486
+ #: inc/cpcff_admin_int.inc.php:506 inc/cpcff_admin_int.inc.php:548
487
  msgid "HTML (use html in the textarea below)"
488
  msgstr ""
489
 
490
+ #: inc/cpcff_admin_int.inc.php:511 inc/cpcff_admin_int.inc.php:553
491
  msgid "Message"
492
  msgstr ""
493
 
494
+ #: inc/cpcff_admin_int.inc.php:521
495
  msgid "Email Copy to User"
496
  msgstr ""
497
 
498
+ #: inc/cpcff_admin_int.inc.php:525
499
  msgid "Send confirmation/thank you message to user?"
500
  msgstr ""
501
 
502
+ #: inc/cpcff_admin_int.inc.php:535
503
  msgid "Email field on the form"
504
  msgstr ""
505
 
506
+ #: inc/cpcff_admin_int.inc.php:562
507
  msgid "Captcha Verification"
508
  msgstr ""
509
 
510
+ #: inc/cpcff_admin_int.inc.php:566
511
  msgid "Use Captcha Verification?"
512
  msgstr ""
513
 
514
+ #: inc/cpcff_admin_int.inc.php:577
515
  msgid "Width"
516
  msgstr ""
517
 
518
+ #: inc/cpcff_admin_int.inc.php:579
519
  msgid "Height"
520
  msgstr ""
521
 
522
+ #: inc/cpcff_admin_int.inc.php:581
523
  msgid "Chars"
524
  msgstr ""
525
 
526
+ #: inc/cpcff_admin_int.inc.php:586
527
  msgid "Min font size"
528
  msgstr ""
529
 
530
+ #: inc/cpcff_admin_int.inc.php:588
531
  msgid "Max font size"
532
  msgstr ""
533
 
534
+ #: inc/cpcff_admin_int.inc.php:593
535
  msgid "security code"
536
  msgstr ""
537
 
538
+ #: inc/cpcff_admin_int.inc.php:599
539
  msgid "Noise"
540
  msgstr ""
541
 
542
+ #: inc/cpcff_admin_int.inc.php:601
543
  msgid "Noise Length"
544
  msgstr ""
545
 
546
+ #: inc/cpcff_admin_int.inc.php:606
547
  msgid "Background"
548
  msgstr ""
549
 
550
+ #: inc/cpcff_admin_int.inc.php:613
551
  msgid "Font"
552
  msgstr ""
553
 
717
  msgid "Do not load the forms with crawlers"
718
  msgstr ""
719
 
720
+ #: inc/cpcff_admin_int_list.inc.php:261
721
  msgid "* The forms are not loaded when website is being indexed by searchers."
722
  msgstr ""
723
 
724
+ #: inc/cpcff_admin_int_list.inc.php:263
725
  msgid "UPDATE"
726
  msgstr ""
727
 
728
+ #: inc/cpcff_admin_int_list.inc.php:270 inc/cpcff_main.inc.php:220
729
  msgid "Upgrade"
730
  msgstr ""
731
 
785
  msgid "Create a JavaScript var from POST, GET, SESSION, or COOKIE var"
786
  msgstr ""
787
 
788
+ #: inc/cpcff_page_builders.inc.php:97
789
  #: pagebuilders/elementor/elementor.pb.php:59
790
  msgid "Select a form"
791
  msgstr ""
792
 
793
+ #: inc/cpcff_page_builders.inc.php:98
794
  msgid "Forms"
795
  msgstr ""
796
 
797
+ #: inc/cpcff_page_builders.inc.php:99
798
+ #: pagebuilders/beaverbuilder/cff/cff.inc.php:38
799
  #: pagebuilders/elementor/elementor.pb.php:70
800
  msgid "Additional attributes"
801
  msgstr ""
802
 
803
+ #: inc/cpcff_page_builders.inc.php:100
804
+ #: pagebuilders/beaverbuilder/cff/cff.inc.php:43
805
+ #: pagebuilders/elementor/elementor.pb.php:85
806
+ #: pagebuilders/siteorigin/siteorigin-cpcff/fields/cff-button.class.php:12
807
+ msgid "Edit form"
808
+ msgstr ""
809
+
810
+ #: pagebuilders/beaverbuilder/cff/cff.inc.php:21
811
  msgid "Select the form and enter the additional attributes"
812
  msgstr ""
813
 
814
+ #: pagebuilders/beaverbuilder/cff/cff.inc.php:24
815
  msgid "Form information"
816
  msgstr ""
817
 
818
+ #: pagebuilders/beaverbuilder/cff/cff.inc.php:28
819
  msgid "Select form"
820
  msgstr ""
821
 
822
+ #: pagebuilders/beaverbuilder/cff/cff.inc.php:34
823
  msgid "Class name"
824
  msgstr ""
825
 
876
  msgid "Create javascript variable"
877
  msgstr ""
878
 
879
+ #: pagebuilders/elementor/elementor.pb.php:181
880
  msgid "Variable Shortcode"
881
  msgstr ""
882
 
883
+ #: pagebuilders/elementor/elementor.pb.php:188
884
  msgid "Variable shortcode"
885
  msgstr ""
886
 
887
+ #: pagebuilders/elementor/elementor.pb.php:193
888
  msgid "I need help [+]"
889
  msgstr ""
890
 
pagebuilders/beaverbuilder/cff/cff.inc.php CHANGED
@@ -7,6 +7,7 @@ $options = array();
7
  $default = '';
8
 
9
  $rows = $wpdb->get_results( "SELECT id, form_name FROM ".$wpdb->prefix.CP_CALCULATEDFIELDSF_FORMS_TABLE );
 
10
  foreach ($rows as $item)
11
  {
12
  $options[$item->id] = $item->form_name;
@@ -36,6 +37,11 @@ FLBuilder::register_module(
36
  'type' => 'text',
37
  'label' => __('Additional attributes', 'calculated-fields-form')
38
  ),
 
 
 
 
 
39
  )
40
  )
41
  )
7
  $default = '';
8
 
9
  $rows = $wpdb->get_results( "SELECT id, form_name FROM ".$wpdb->prefix.CP_CALCULATEDFIELDSF_FORMS_TABLE );
10
+ $url = CPCFF_AUXILIARY::editor_url();
11
  foreach ($rows as $item)
12
  {
13
  $options[$item->id] = $item->form_name;
37
  'type' => 'text',
38
  'label' => __('Additional attributes', 'calculated-fields-form')
39
  ),
40
+ 'form_editor' => array(
41
+ 'type' => 'raw',
42
+ 'preview' => 'none',
43
+ 'content' => '<button style="float:right;" class="fl-builder-button fl-builder-button-small" title="'.esc_attr(__('Edit form', 'calculated-fields-form')).'" onclick="window.open(\''.esc_attr($url).'\'+document.getElementsByName(\'form_id\')[0].value);">'.esc_attr(__('Edit form', 'calculated-fields-form')).'</button>',
44
+ )
45
  )
46
  )
47
  )
pagebuilders/elementor/assets/elementor.css CHANGED
@@ -4,4 +4,8 @@
4
  display: block !important;
5
  max-width: 100% !important;
6
  margin: 0 !important;
 
 
 
 
7
  }
4
  display: block !important;
5
  max-width: 100% !important;
6
  margin: 0 !important;
7
+ }
8
+ .cff-edit-form-btn button{
9
+ padding: 8px 15px;
10
+ height: auto !important;
11
  }
pagebuilders/elementor/assets/elementor.js ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(function(){
2
+ try
3
+ {
4
+ elementor.channels.editor.on('cff_open_form_editor', function(){
5
+ try
6
+ {
7
+ if(typeof cp_calculatedfieldsf_elementor != 'undefined')
8
+ {
9
+ window.open(
10
+ cp_calculatedfieldsf_elementor.url+jQuery('[data-setting="form"] option:selected').attr('value'),
11
+ '_blank'
12
+ );
13
+ }
14
+ }
15
+ catch(err){}
16
+ });
17
+ }
18
+ catch(err){}
19
+ });
pagebuilders/elementor/elementor.pb.php CHANGED
@@ -75,6 +75,21 @@ class Elementor_CFF_Widget extends Widget_Base
75
  )
76
  );
77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  $this->end_controls_section();
79
  } // End _register_controls
80
 
75
  )
76
  );
77
 
78
+ if(current_user_can( 'manage_options'))
79
+ {
80
+ $this->add_control(
81
+ 'open-editor',
82
+ array(
83
+ 'type' => Controls_Manager::BUTTON,
84
+ 'separator' => 'before',
85
+ 'text' => __('Edit form', 'calculated-fields-form'),
86
+ 'classes' => 'cff-edit-form-btn',
87
+ 'button_type' => 'success',
88
+ 'event' => 'cff_open_form_editor'
89
+ )
90
+ );
91
+ }
92
+
93
  $this->end_controls_section();
94
  } // End _register_controls
95
 
pagebuilders/gutenberg/assets/js/gutenberg.js CHANGED
@@ -50,6 +50,15 @@ jQuery(function()
50
  generate_shortcode();
51
  };
52
 
 
 
 
 
 
 
 
 
 
53
  function get_id()
54
  {
55
  var output = '',
@@ -205,6 +214,26 @@ jQuery(function()
205
  style:{fontStyle: 'italic'}
206
  },
207
  'variable_name="value"'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  )
209
  ]
210
  )
50
  generate_shortcode();
51
  };
52
 
53
+ function edit_form()
54
+ {
55
+ try
56
+ {
57
+ window.open(cpcff_gutenberg_editor_config.editor+id, '_blank');
58
+ }
59
+ catch(err){}
60
+ };
61
+
62
  function get_id()
63
  {
64
  var output = '',
214
  style:{fontStyle: 'italic'}
215
  },
216
  'variable_name="value"'
217
+ ),
218
+ el(
219
+ 'div',
220
+ {
221
+ key: 'cpcff_inspector_button_container',
222
+ style:{
223
+ paddingTop:'20px',
224
+ display:((cpcff_gutenberg_editor_config.is_admin) ? 'block' : 'none')
225
+ }
226
+ },
227
+ el(
228
+ 'input',
229
+ {
230
+ type: 'button',
231
+ key: 'cpcff_form_editor',
232
+ value: cpcff_gutenberg_editor_config['labels']['edit_form'],
233
+ className: 'button-primary',
234
+ onClick: edit_form
235
+ }
236
+ )
237
  )
238
  ]
239
  )
pagebuilders/siteorigin/siteorigin-cpcff/fields/cff-button.class.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class CFF_Button
4
+ */
5
+ class SiteOrigin_Widget_Field_CFF_Button extends SiteOrigin_Widget_Field_Base {
6
+
7
+ protected function render_field( $value, $instance ) {
8
+ if ( current_user_can( 'manage_options' ) )
9
+ {
10
+ $url = CPCFF_AUXILIARY::editor_url();
11
+ ?>
12
+ <input type="button" name="cff-button-edit-form" class="button-primary" value="<?php echo esc_attr( __('Edit form', 'calculated-fields-form') ); ?>" />
13
+ <script>
14
+ if(typeof jQuery != 'undefined')
15
+ {
16
+ jQuery(document).on('click', '[name="cff-button-edit-form"]', function(){
17
+ window.open(
18
+ '<?php print $url; ?>'+jQuery('select[id*="widget-siteorigin-cff-shortcode"]:visible').val(),
19
+ '_blank'
20
+ );
21
+ });
22
+ }
23
+ </script>
24
+ <?php
25
+ }
26
+ }
27
+
28
+ protected function sanitize_field_input($value, $instance) {}
29
+ protected function add_label_classes( $label_classes ) {}
30
+ protected function render_field_label($value, $instance) {}
31
+ protected function render_before_field( $value, $instance ) {}
32
+ protected function render_after_field( $value, $instance ) {}
33
+ }
pagebuilders/siteorigin/siteorigin-cpcff/siteorigin-cpcff.php CHANGED
@@ -43,11 +43,22 @@ class SiteOrigin_CFF_Shortcode extends SiteOrigin_Widget
43
  'type' => 'text',
44
  'label' => __('Pass additional attributes to the form. Ex: attr_name="attr_value" (optional)', 'calculated-fields-form')
45
  ),
 
 
 
46
  ),
47
  plugin_dir_path(__FILE__)
48
  );
 
 
49
  } // End __construct
50
 
 
 
 
 
 
 
51
  function get_template_name($instance)
52
  {
53
  return 'siteorigin-cff-shortcode';
43
  'type' => 'text',
44
  'label' => __('Pass additional attributes to the form. Ex: attr_name="attr_value" (optional)', 'calculated-fields-form')
45
  ),
46
+ 'btn' => array(
47
+ 'type' => 'CFF_Button'
48
+ ),
49
  ),
50
  plugin_dir_path(__FILE__)
51
  );
52
+
53
+ add_filter( 'siteorigin_widgets_field_class_paths', array( $this, 'add_location_field_path' ) );
54
  } // End __construct
55
 
56
+ function add_location_field_path($class_paths)
57
+ {
58
+ $class_paths[] = plugin_dir_path( __FILE__ ) . 'fields/';
59
+ return $class_paths;
60
+ } // End add_location_field_path
61
+
62
  function get_template_name($instance)
63
  {
64
  return 'siteorigin-cff-shortcode';