Version Description
- Modifies the dependencies (Checkbox, Radio Buttons, DropDown, Container fields, Calculated fields).
- Modifies the date/time control for defining the aria-labels for screen readers.
- Fixes an issue that causes the loopback request to the site fails, caused by the sessions management (Professional, Developer and Platinum versions of the plugin).
- Includes a new attribute in the troubleshoot section for starting the session as soon as possible (in case of conflict with other plugins) (Professional, Developer, and Platinum versions of the plugin).
- Modifies the PayPal Pro add-on (Platinum version of the plugin).
Download this release
Release Info
Developer | codepeople |
Plugin | Calculated Fields Form |
Version | 1.0.290 |
Comparing to | |
See all releases |
Code changes from version 1.0.280 to 1.0.290
- README.txt +60 -42
- captcha/captcha.php +3 -1
- changelog.txt +60 -0
- config/cpcff_config.cfg.php +7 -5
- cp_calculatedfieldsf_free.php +2 -6
- css/stylepublic.css +1 -1
- inc/cpcff_admin_int.inc.php +1 -1
- inc/cpcff_auxiliary.inc.php +45 -0
- inc/cpcff_main.inc.php +7 -4
- inc/cpcff_page_builders.inc.php +54 -7
- inc/cpcff_session.inc.php +1 -1
- js/fbuilder-pro-public.jquery.js +2 -1
- js/fields-admin/04_fbuilder.fdate.js +12 -2
- js/fields-public/02_fbuilder.fslider.js +13 -8
- js/fields-public/04_fbuilder.fdate.js +162 -121
- js/fields-public/06_fbuilder.fcheck.js +1 -0
- js/fields-public/07_fbuilder.fradio.js +1 -0
- js/fields-public/08_fbuilder.fdropdown.js +1 -0
- js/fields-public/28_fbuilder.fcontainer.js +1 -0
- js/fields-public/fbuilder.fcalculated.js +2 -0
- pagebuilders/elementor/assets/elementor.css +7 -0
- pagebuilders/{elementor.pb.php → elementor/elementor.pb.php} +3 -0
- pagebuilders/{elementor_category.pb.php → elementor/elementor_category.pb.php} +0 -0
- {css → pagebuilders/gutenberg/assets/css}/gutenberg.css +0 -0
- js/cp_calculatedfieldsf_gutenberg.js → pagebuilders/gutenberg/assets/js/gutenberg.js +4 -4
- pagebuilders/siteorigin/siteorigin-cpcff-variable/assets/banner.svg +1 -0
- pagebuilders/siteorigin/siteorigin-cpcff-variable/siteorigin-cpcff-variable.php +67 -0
- pagebuilders/siteorigin/siteorigin-cpcff-variable/tpl/siteorigin-cff-variable-shortcode.php +15 -0
- pagebuilders/siteorigin/siteorigin-cpcff/assets/banner.svg +1 -0
- pagebuilders/siteorigin/siteorigin-cpcff/siteorigin-cpcff.php +64 -0
- pagebuilders/siteorigin/siteorigin-cpcff/tpl/siteorigin-cff-shortcode.php +13 -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 |
Stable tag: trunk
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
@@ -53,6 +53,7 @@ The "Calculated Fields Form" plugin allows the specific integration with the fol
|
|
53 |
* Classic WordPress Editor.
|
54 |
* Gutenberg Editor.
|
55 |
* Elementor.
|
|
|
56 |
* For other editors, the shortcodes should be inserted using other controls of general purpose, like the controls for inserting HTML or shortcodes.
|
57 |
|
58 |
= Latest Features Added =
|
@@ -124,6 +125,7 @@ The plugin has two additional (commercial) versions: **Premium** and **Developer
|
|
124 |
* Includes the "Autocomplete Places" add-on that allows integrate the input fields with the Photon API to autocomplete the addresses entered by the users.
|
125 |
* Includes the "Signature" add-on to convert some form fields in "Signature" fields, allowing the users to sign with the mouse or directly in the touchscreens.
|
126 |
* Includes the "iCal" add-on for sending the users an iCal file as part of the confirmation email after the form submission to be imported into most popular calendars like Outlook and Google Calendar.
|
|
|
127 |
* Includes the "WebMerge" add-on to integrate the forms with the WebMerge Service, and generate PDF and Office documents at runtime with the information collected by the forms.
|
128 |
* Includes the "PrintFriendly" add-on to integrate the forms with the PrintFriendly API for generating PDF files after forms submissions, and attach the resulting files to the notification emails.
|
129 |
* Includes the "MailChimp" add-on to add new members to the MailChimp Service using the data collected by the form.
|
@@ -395,6 +397,12 @@ The "iCal" add-on sends the users an iCal file as part of the confirmation email
|
|
395 |
|
396 |
[CLICK HERE for additional information ](http://cff.dwbooster.com/documentation#ical-addon "iCal add-on")
|
397 |
|
|
|
|
|
|
|
|
|
|
|
|
|
398 |
= WebMerge add-on - Only available in the Platinum version of the plugin =
|
399 |
|
400 |
The "WebMerge" add-on integrates the forms with the WebMerge Service, and generate PDF and Office documents at runtime with the information collected by the forms.
|
@@ -889,71 +897,81 @@ A: Please, visit the following entry in our technical blog:
|
|
889 |
2. Inserting the form using the Classic Editor
|
890 |
3. Inserting the form using the Gutenberg Editor
|
891 |
4. Inserting the form using Elementor
|
892 |
-
5.
|
893 |
-
6.
|
894 |
-
7.
|
895 |
-
8.
|
896 |
-
9.
|
897 |
-
10.
|
898 |
-
11.
|
899 |
-
12.
|
900 |
-
13.
|
|
|
901 |
|
902 |
== Changelog ==
|
903 |
|
904 |
-
= 1.0.
|
905 |
|
906 |
-
* Modifies the
|
907 |
-
* Modifies the
|
908 |
-
*
|
|
|
|
|
909 |
|
910 |
-
= 1.0.
|
911 |
|
912 |
-
*
|
|
|
|
|
|
|
|
|
|
|
913 |
|
914 |
-
= 1.0.
|
915 |
|
916 |
-
*
|
917 |
-
*
|
918 |
-
*
|
|
|
919 |
|
920 |
-
= 1.0.
|
921 |
|
922 |
-
*
|
923 |
-
* Optimizes the form's styles.
|
924 |
-
* Allows to includes images and html tags in the tooltips.
|
925 |
-
* Fixes an issue printing the list of messages when includes images (Professional, Developer, and Platinum versions of the plugin)
|
926 |
|
927 |
-
= 1.0.
|
928 |
|
929 |
-
*
|
930 |
|
931 |
-
= 1.0.
|
932 |
|
933 |
-
*
|
934 |
-
* Includes new controls in the interface of the equations edition: SIN, COS, TAN, ASIN, ACOS, ATAN, ATAN2, ATANH, RADIANS, DEGREES.
|
935 |
|
936 |
-
= 1.0.
|
937 |
|
938 |
-
*
|
939 |
-
*
|
940 |
-
*
|
|
|
|
|
|
|
941 |
|
942 |
-
= 1.0.
|
943 |
|
944 |
-
*
|
945 |
|
946 |
-
= 1.0.
|
947 |
|
948 |
-
*
|
949 |
-
* Fixes some little issues with the messages list.
|
950 |
|
951 |
-
= 1.0.
|
952 |
|
953 |
-
* Fixes
|
|
|
|
|
|
|
954 |
|
955 |
== Upgrade Notice ==
|
956 |
|
957 |
-
= 1.0.
|
958 |
|
959 |
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.1
|
7 |
Stable tag: trunk
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
53 |
* Classic WordPress Editor.
|
54 |
* Gutenberg Editor.
|
55 |
* Elementor.
|
56 |
+
* Page Builder by SiteOrigin.
|
57 |
* For other editors, the shortcodes should be inserted using other controls of general purpose, like the controls for inserting HTML or shortcodes.
|
58 |
|
59 |
= Latest Features Added =
|
125 |
* Includes the "Autocomplete Places" add-on that allows integrate the input fields with the Photon API to autocomplete the addresses entered by the users.
|
126 |
* Includes the "Signature" add-on to convert some form fields in "Signature" fields, allowing the users to sign with the mouse or directly in the touchscreens.
|
127 |
* Includes the "iCal" add-on for sending the users an iCal file as part of the confirmation email after the form submission to be imported into most popular calendars like Outlook and Google Calendar.
|
128 |
+
* Includes the "CSV Generator" add-on that allows to export dynamically the information collected by the form to a CSV file, and send it as attachment in the notification emails.
|
129 |
* Includes the "WebMerge" add-on to integrate the forms with the WebMerge Service, and generate PDF and Office documents at runtime with the information collected by the forms.
|
130 |
* Includes the "PrintFriendly" add-on to integrate the forms with the PrintFriendly API for generating PDF files after forms submissions, and attach the resulting files to the notification emails.
|
131 |
* Includes the "MailChimp" add-on to add new members to the MailChimp Service using the data collected by the form.
|
397 |
|
398 |
[CLICK HERE for additional information ](http://cff.dwbooster.com/documentation#ical-addon "iCal add-on")
|
399 |
|
400 |
+
= CSV Generator add-on - Only available in the Platinum version of the plugin =
|
401 |
+
|
402 |
+
The "CSV Generator" add-on allows to export dynamically the information collected by the form to a CSV file, and send it as attachment in the notification emails.
|
403 |
+
|
404 |
+
[CLICK HERE for additional information ](http://cff.dwbooster.com/documentation#csv-generator-addon "CSV Generator add-on")
|
405 |
+
|
406 |
= WebMerge add-on - Only available in the Platinum version of the plugin =
|
407 |
|
408 |
The "WebMerge" add-on integrates the forms with the WebMerge Service, and generate PDF and Office documents at runtime with the information collected by the forms.
|
897 |
2. Inserting the form using the Classic Editor
|
898 |
3. Inserting the form using the Gutenberg Editor
|
899 |
4. Inserting the form using Elementor
|
900 |
+
5. Inserting the form using Page Builder by SiteOrigin
|
901 |
+
6. Sample calculated form
|
902 |
+
7. Calculated field settings
|
903 |
+
8. Calculator Form builder
|
904 |
+
9. Editing general fields
|
905 |
+
10. Available designs
|
906 |
+
11. Add-ons section
|
907 |
+
12. WooCommerce add-on
|
908 |
+
13. SalesForce add-on
|
909 |
+
14. WebHook add-on, and its integration with Zapier
|
910 |
|
911 |
== Changelog ==
|
912 |
|
913 |
+
= 1.0.290 =
|
914 |
|
915 |
+
* Modifies the dependencies (Checkbox, Radio Buttons, DropDown, Container fields, Calculated fields).
|
916 |
+
* Modifies the date/time control for defining the aria-labels for screen readers.
|
917 |
+
* Fixes an issue that causes the loopback request to the site fails, caused by the sessions management (Professional, Developer and Platinum versions of the plugin).
|
918 |
+
* Includes a new attribute in the troubleshoot section for starting the session as soon as possible (in case of conflict with other plugins) (Professional, Developer, and Platinum versions of the plugin).
|
919 |
+
* Modifies the PayPal Pro add-on (Platinum version of the plugin).
|
920 |
|
921 |
+
= 1.0.289 =
|
922 |
|
923 |
+
* Improves the Widgets for Page Builder by SiteOrigin.
|
924 |
+
* Improves the Widgets for Elementor.
|
925 |
+
* Includes a new block for inserting the results list shortcode in the Gutenberg editor (Professional, Developer and Platinum versions of the plugin).
|
926 |
+
* Includes a new icon for inserting the results list shortcode in the Classic WordPress editor (Professional, Developer and Platinum versions of the plugin).
|
927 |
+
* Modifies the module that generates the default email address used in the "from" attribute (Professional, Developer and Platinum versions of the plugin).
|
928 |
+
* Fixes some errors in the CFF - CSV Generator add-on (Platinum version of the plugin).
|
929 |
|
930 |
+
= 1.0.288 =
|
931 |
|
932 |
+
* Implements new Widgets to allow the specific integration with the Page Builder by SiteOrigin.
|
933 |
+
* Improves the integration with the other pages builders.
|
934 |
+
* Modifies the Appearance/Widget, allowing to associate a class name to the form, and pass to it additional attributes (Professional, Developer and Platinum versions of the plugin).
|
935 |
+
* Includes minimum changes in the CFF - WooCommerce add-on (Developer and Platinum versions of the plugin).
|
936 |
|
937 |
+
= 1.0.287 =
|
938 |
|
939 |
+
* Fixes an issue that causes the loopback request to the site fails.
|
|
|
|
|
|
|
940 |
|
941 |
+
= 1.0.286 =
|
942 |
|
943 |
+
* Modifies the blocks for the Gutenberg editor, preparing the plugin for WordPress 5.1
|
944 |
|
945 |
+
= 1.0.285 =
|
946 |
|
947 |
+
* Fixes an issue in the date/time controls.
|
|
|
948 |
|
949 |
+
= 1.0.284 =
|
950 |
|
951 |
+
* Fixes some issues in the slider control.
|
952 |
+
* Modifies the Date controls allowing to enter other fields' names as the min and max attributes.
|
953 |
+
* Modifies the Captcha generator to fix a conflict with other plugins.
|
954 |
+
* Includes some minimal changes in the DS fields (Developer and Platinum versions of the plugin).
|
955 |
+
* Includes some minimal changes in the interface of the Users Permissions add-on. Assings class names to the different tags in the list of users submissions (Developer and Platinum versions of the plugin).
|
956 |
+
* Modifies the CSV Generator add-on to improve the security in the generated CSV files.
|
957 |
|
958 |
+
= 1.0.283 =
|
959 |
|
960 |
+
* Modifies the code that assigns the default values to the slider control.
|
961 |
|
962 |
+
= 1.0.282 =
|
963 |
|
964 |
+
* Fixes an issue in the slider controls.
|
|
|
965 |
|
966 |
+
= 1.0.281 =
|
967 |
|
968 |
+
* Fixes a conflict with older browsers.
|
969 |
+
* Modifies the SESSION Management module.
|
970 |
+
* Includes a new module for cleaning the expired transients.
|
971 |
+
* The Platinum version of the plugin includes the CSV Generator add-on.
|
972 |
|
973 |
== Upgrade Notice ==
|
974 |
|
975 |
+
= 1.0.290 =
|
976 |
|
977 |
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
|
captcha/captcha.php
CHANGED
@@ -136,7 +136,9 @@ for ($i=0;$i<$noise;$i++)
|
|
136 |
|
137 |
$font = dirname( __FILE__ ) . "/font-1.ttf"; // font
|
138 |
if ($_GET["font"]) $font = dirname( __FILE__ ) . "/".$_GET["font"];
|
139 |
-
|
|
|
|
|
140 |
|
141 |
$font_size = rand($min_size, $max_size);
|
142 |
|
136 |
|
137 |
$font = dirname( __FILE__ ) . "/font-1.ttf"; // font
|
138 |
if ($_GET["font"]) $font = dirname( __FILE__ ) . "/".$_GET["font"];
|
139 |
+
|
140 |
+
// Removed @2x, the patch fixes an issue caused by other plugin that includes the @2x in the name of font files.
|
141 |
+
$font = str_replace( array("\\", "@2x"), array("/", ""), $font );
|
142 |
|
143 |
$font_size = rand($min_size, $max_size);
|
144 |
|
changelog.txt
CHANGED
@@ -1,5 +1,65 @@
|
|
1 |
== Changelog ==
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
= 1.0.280 =
|
4 |
|
5 |
* Modifies the slider controls allowing to integrate other fields in the form with the attributes: min, max and step, and vary them dynamically at runtime.
|
1 |
== Changelog ==
|
2 |
|
3 |
+
= 1.0.290 =
|
4 |
+
|
5 |
+
* Modifies the dependencies (Checkbox, Radio Buttons, DropDown, Container fields, Calculated fields).
|
6 |
+
* Modifies the date/time control for defining the aria-labels for screen readers.
|
7 |
+
* Fixes an issue that causes the loopback request to the site fails, caused by the sessions management (Professional, Developer and Platinum versions of the plugin).
|
8 |
+
* Includes a new attribute in the troubleshoot section for starting the session as soon as possible (in case of conflict with other plugins) (Professional, Developer, and Platinum versions of the plugin).
|
9 |
+
* Modifies the PayPal Pro add-on (Platinum version of the plugin).
|
10 |
+
|
11 |
+
= 1.0.289 =
|
12 |
+
|
13 |
+
* Improves the Widgets for Page Builder by SiteOrigin.
|
14 |
+
* Improves the Widgets for Elementor.
|
15 |
+
* Includes a new block for inserting the results list shortcode in the Gutenberg editor (Professional, Developer and Platinum versions of the plugin).
|
16 |
+
* Includes a new icon for inserting the results list shortcode in the Classic WordPress editor (Professional, Developer and Platinum versions of the plugin).
|
17 |
+
* Modifies the module that generates the default email address used in the "from" attribute (Professional, Developer and Platinum versions of the plugin).
|
18 |
+
* Fixes some errors in the CFF - CSV Generator add-on (Platinum version of the plugin).
|
19 |
+
|
20 |
+
= 1.0.288 =
|
21 |
+
|
22 |
+
* Implements new Widgets to allow the specific integration with the Page Builder by SiteOrigin.
|
23 |
+
* Improves the integration with the other pages builders.
|
24 |
+
* Modifies the Appearance/Widget, allowing to associate a class name to the form, and pass to it additional attributes (Professional, Developer and Platinum versions of the plugin).
|
25 |
+
* Includes minimum changes in the CFF - WooCommerce add-on (Developer and Platinum versions of the plugin).
|
26 |
+
|
27 |
+
= 1.0.287 =
|
28 |
+
|
29 |
+
* Fixes an issue that causes the loopback request to the site fails.
|
30 |
+
|
31 |
+
= 1.0.286 =
|
32 |
+
|
33 |
+
* Modifies the blocks for the Gutenberg editor, preparing the plugin for WordPress 5.1
|
34 |
+
|
35 |
+
= 1.0.285 =
|
36 |
+
|
37 |
+
* Fixes an issue in the date/time controls.
|
38 |
+
|
39 |
+
= 1.0.284 =
|
40 |
+
|
41 |
+
* Fixes some issues in the slider control.
|
42 |
+
* Modifies the Date controls allowing to enter other fields' names as the min and max attributes.
|
43 |
+
* Modifies the Captcha generator to fix a conflict with other plugins.
|
44 |
+
* Includes some minimal changes in the DS fields (Developer and Platinum versions of the plugin).
|
45 |
+
* Includes some minimal changes in the interface of the Users Permissions add-on. Assings class names to the different tags in the list of users submissions (Developer and Platinum versions of the plugin).
|
46 |
+
* Modifies the CSV Generator add-on to improve the security in the generated CSV files.
|
47 |
+
|
48 |
+
= 1.0.283 =
|
49 |
+
|
50 |
+
* Modifies the code that assigns the default values to the slider control.
|
51 |
+
|
52 |
+
= 1.0.282 =
|
53 |
+
|
54 |
+
* Fixes an issue in the slider controls.
|
55 |
+
|
56 |
+
= 1.0.281 =
|
57 |
+
|
58 |
+
* Fixes a conflict with older browsers.
|
59 |
+
* Modifies the SESSION Management module.
|
60 |
+
* Includes a new module for cleaning the expired transients.
|
61 |
+
* The Platinum version of the plugin includes the CSV Generator add-on.
|
62 |
+
|
63 |
= 1.0.280 =
|
64 |
|
65 |
* Modifies the slider controls allowing to integrate other fields in the form with the attributes: min, max and step, and vary them dynamically at runtime.
|
config/cpcff_config.cfg.php
CHANGED
@@ -132,11 +132,13 @@ if(!function_exists('cpcff_init_constants'))
|
|
132 |
// User emails
|
133 |
if(!defined('CP_CALCULATEDFIELDSF_DEFAULT_fp_from_email'))
|
134 |
{
|
135 |
-
$
|
136 |
-
|
137 |
-
|
138 |
-
|
139 |
-
);
|
|
|
|
|
140 |
}
|
141 |
|
142 |
if(!defined('CP_CALCULATEDFIELDSF_DEFAULT_fp_destination_emails'))
|
132 |
// User emails
|
133 |
if(!defined('CP_CALCULATEDFIELDSF_DEFAULT_fp_from_email'))
|
134 |
{
|
135 |
+
$user_email = get_the_author_meta('user_email', get_current_user_id());
|
136 |
+
$host = $_SERVER['HTTP_HOST'];
|
137 |
+
preg_match("/[^\.\/]+(\.[^\.\/]+)?$/", $host, $matches);
|
138 |
+
$domain = $matches[0];
|
139 |
+
$pos = strpos($user_email, $domain);
|
140 |
+
if ($pos === false) define('CP_CALCULATEDFIELDSF_DEFAULT_fp_from_email', 'admin@'.$domain );
|
141 |
+
else define('CP_CALCULATEDFIELDSF_DEFAULT_fp_from_email', $user_email );
|
142 |
}
|
143 |
|
144 |
if(!defined('CP_CALCULATEDFIELDSF_DEFAULT_fp_destination_emails'))
|
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.
|
7 |
Text Domain: calculated-fields-form
|
8 |
Author: CodePeople
|
9 |
Author URI: https://cff.dwbooster.com
|
@@ -15,12 +15,8 @@ if(!defined('WP_DEBUG') || true != WP_DEBUG)
|
|
15 |
error_reporting(E_ERROR|E_PARSE);
|
16 |
}
|
17 |
|
18 |
-
require_once 'inc/cpcff_session.inc.php';
|
19 |
-
// Start Session
|
20 |
-
if( !defined('DOING_AJAX') && !defined('DOING_CRON')) CP_SESSION::session_start();
|
21 |
-
|
22 |
// Defining main constants
|
23 |
-
define('CP_CALCULATEDFIELDSF_VERSION', '1.0.
|
24 |
define('CP_CALCULATEDFIELDSF_MAIN_FILE_PATH', __FILE__ );
|
25 |
define('CP_CALCULATEDFIELDSF_BASE_PATH', dirname( CP_CALCULATEDFIELDSF_MAIN_FILE_PATH ) );
|
26 |
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.0.290
|
7 |
Text Domain: calculated-fields-form
|
8 |
Author: CodePeople
|
9 |
Author URI: https://cff.dwbooster.com
|
15 |
error_reporting(E_ERROR|E_PARSE);
|
16 |
}
|
17 |
|
|
|
|
|
|
|
|
|
18 |
// Defining main constants
|
19 |
+
define('CP_CALCULATEDFIELDSF_VERSION', '1.0.290' );
|
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/stylepublic.css
CHANGED
@@ -117,7 +117,7 @@
|
|
117 |
#fbuilder .col-sm-9,
|
118 |
#fbuilder .col-sm-10,
|
119 |
#fbuilder .col-sm-11{float:left;clear:none;margin-left:0;margin-right:0;}
|
120 |
-
#fbuilder .col-sm-12{float:none;clear:
|
121 |
|
122 |
#fbuilder .col-sm-1 {width: 8.33333333%;}
|
123 |
#fbuilder .col-sm-2 {width: 16.66666667%;}
|
117 |
#fbuilder .col-sm-9,
|
118 |
#fbuilder .col-sm-10,
|
119 |
#fbuilder .col-sm-11{float:left;clear:none;margin-left:0;margin-right:0;}
|
120 |
+
#fbuilder .col-sm-12{float:none;clear:both;margin-left:0;margin-right:0;}
|
121 |
|
122 |
#fbuilder .col-sm-1 {width: 8.33333333%;}
|
123 |
#fbuilder .col-sm-2 {width: 16.66666667%;}
|
inc/cpcff_admin_int.inc.php
CHANGED
@@ -491,7 +491,7 @@ $cpcff_texts_array = CPCFF_AUXILIARY::array_replace_recursive(
|
|
491 |
<table class="form-table">
|
492 |
<tr valign="top">
|
493 |
<th scope="row"><?php _e( '"From" email', 'calculated-fields-form' ); ?></th>
|
494 |
-
<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)); ?>"
|
495 |
</tr>
|
496 |
<tr valign="top">
|
497 |
<th scope="row"><?php _e( 'Destination emails (comma separated)', 'calculated-fields-form' ); ?></th>
|
491 |
<table class="form-table">
|
492 |
<tr valign="top">
|
493 |
<th scope="row"><?php _e( '"From" email', 'calculated-fields-form' ); ?></th>
|
494 |
+
<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><i>Ex: admin@<?php echo str_replace('www.','',$_SERVER["HTTP_HOST"]); ?></i></td>
|
495 |
</tr>
|
496 |
<tr valign="top">
|
497 |
<th scope="row"><?php _e( 'Destination emails (comma separated)', 'calculated-fields-form' ); ?></th>
|
inc/cpcff_auxiliary.inc.php
CHANGED
@@ -122,6 +122,51 @@ if(!class_exists('CPCFF_AUXILIARY'))
|
|
122 |
);
|
123 |
} // End clean_json
|
124 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
125 |
/**
|
126 |
* Decodes a JSON string.
|
127 |
*
|
122 |
);
|
123 |
} // End clean_json
|
124 |
|
125 |
+
/**
|
126 |
+
* Set the hook for cleanning the expired transients
|
127 |
+
*
|
128 |
+
* @since 1.0.281
|
129 |
+
*/
|
130 |
+
public static function clean_transients_hook()
|
131 |
+
{
|
132 |
+
add_action('cpcff_clean_transients', array('CPCFF_AUXILIARY', 'clean_transients'));
|
133 |
+
if (!wp_next_scheduled('cpcff_clean_transients'))
|
134 |
+
wp_schedule_event(time() + 5, 'daily', 'cpcff_clean_transients');
|
135 |
+
} // End clean_transients_hook
|
136 |
+
|
137 |
+
/**
|
138 |
+
* Clean the expired transients
|
139 |
+
*
|
140 |
+
* @since 1.0.281
|
141 |
+
*/
|
142 |
+
public static function clean_transients()
|
143 |
+
{
|
144 |
+
global $wpdb;
|
145 |
+
$table = $wpdb->options;
|
146 |
+
|
147 |
+
// get current PHP time, offset by a minute to avoid clashes with other tasks
|
148 |
+
$threshold = time() - MINUTE_IN_SECONDS;
|
149 |
+
|
150 |
+
// delete expired transients, using the paired timeout record to find them
|
151 |
+
$sql = "
|
152 |
+
delete from t1, t2
|
153 |
+
using $table t1
|
154 |
+
join $table t2 on t2.option_name = replace(t1.option_name, '_timeout', '')
|
155 |
+
where t1.option_name like '\_transient\_timeout\_%'
|
156 |
+
and t1.option_value < '$threshold'
|
157 |
+
";
|
158 |
+
$wpdb->query($sql);
|
159 |
+
|
160 |
+
// delete orphaned transient expirations
|
161 |
+
$sql = "
|
162 |
+
delete from $table
|
163 |
+
where option_name like '\_transient\_timeout\_%'
|
164 |
+
and option_value < '$threshold'
|
165 |
+
";
|
166 |
+
|
167 |
+
$wpdb->query($sql);
|
168 |
+
} // End clean_transients
|
169 |
+
|
170 |
/**
|
171 |
* Decodes a JSON string.
|
172 |
*
|
inc/cpcff_main.inc.php
CHANGED
@@ -112,6 +112,10 @@ if(!class_exists('CPCFF_MAIN'))
|
|
112 |
// Fix different troubleshoots
|
113 |
$this->troubleshoots();
|
114 |
|
|
|
|
|
|
|
|
|
115 |
} // End __construct
|
116 |
|
117 |
/**
|
@@ -127,7 +131,7 @@ if(!class_exists('CPCFF_MAIN'))
|
|
127 |
self::$_instance = new self();
|
128 |
}
|
129 |
return self::$_instance;
|
130 |
-
} // End
|
131 |
|
132 |
/**
|
133 |
* Loads the primary resources, previous to the plugin's initialization
|
@@ -154,6 +158,8 @@ if(!class_exists('CPCFF_MAIN'))
|
|
154 |
*/
|
155 |
public function init()
|
156 |
{
|
|
|
|
|
157 |
if ( $this->_is_admin ) // Initializes the WordPress modules.
|
158 |
{
|
159 |
if(
|
@@ -182,9 +188,6 @@ if(!class_exists('CPCFF_MAIN'))
|
|
182 |
$this->_define_shortcodes();
|
183 |
}
|
184 |
|
185 |
-
// Integration with Page Builders
|
186 |
-
require_once CP_CALCULATEDFIELDSF_BASE_PATH.'/inc/cpcff_page_builders.inc.php';
|
187 |
-
CPCFF_PAGE_BUILDERS::init();
|
188 |
} // End init
|
189 |
|
190 |
/**
|
112 |
// Fix different troubleshoots
|
113 |
$this->troubleshoots();
|
114 |
|
115 |
+
// Integration with Page Builders
|
116 |
+
require_once CP_CALCULATEDFIELDSF_BASE_PATH.'/inc/cpcff_page_builders.inc.php';
|
117 |
+
CPCFF_PAGE_BUILDERS::run();
|
118 |
+
|
119 |
} // End __construct
|
120 |
|
121 |
/**
|
131 |
self::$_instance = new self();
|
132 |
}
|
133 |
return self::$_instance;
|
134 |
+
} // End instance
|
135 |
|
136 |
/**
|
137 |
* Loads the primary resources, previous to the plugin's initialization
|
158 |
*/
|
159 |
public function init()
|
160 |
{
|
161 |
+
CPCFF_AUXILIARY::clean_transients_hook(); // Set the hook for clearing the expired transients
|
162 |
+
|
163 |
if ( $this->_is_admin ) // Initializes the WordPress modules.
|
164 |
{
|
165 |
if(
|
188 |
$this->_define_shortcodes();
|
189 |
}
|
190 |
|
|
|
|
|
|
|
191 |
} // End init
|
192 |
|
193 |
/**
|
inc/cpcff_page_builders.inc.php
CHANGED
@@ -7,15 +7,41 @@ if(!class_exists('CPCFF_PAGE_BUILDERS'))
|
|
7 |
{
|
8 |
class CPCFF_PAGE_BUILDERS
|
9 |
{
|
|
|
10 |
private function __construct(){}
|
11 |
-
|
12 |
{
|
13 |
-
|
|
|
|
|
14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
add_action( 'enqueue_block_editor_assets', array($instance,'gutenberg_editor' ) );
|
|
|
|
|
16 |
add_action( 'elementor/widgets/widgets_registered', array($instance, 'elementor_editor') );
|
17 |
add_action( 'elementor/elements/categories_registered', array($instance, 'elementor_editor_category') );
|
18 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
20 |
/**************************** GUTENBERG ****************************/
|
21 |
|
@@ -26,8 +52,8 @@ if(!class_exists('CPCFF_PAGE_BUILDERS'))
|
|
26 |
{
|
27 |
global $wpdb;
|
28 |
|
29 |
-
wp_enqueue_style('cp_calculatedfieldsf_gutenberg_editor_css', plugins_url('/css/gutenberg.css', CP_CALCULATEDFIELDSF_MAIN_FILE_PATH));
|
30 |
-
wp_enqueue_script('cp_calculatedfieldsf_gutenberg_editor', plugins_url('/js/
|
31 |
|
32 |
$url = CPCFF_AUXILIARY::site_url();
|
33 |
$url .= ((strpos($url, '?') === false) ? '?' : '&').'cff-editor-preview=1&cff-amp-redirected=1&cff-form=';
|
@@ -53,13 +79,34 @@ if(!class_exists('CPCFF_PAGE_BUILDERS'))
|
|
53 |
|
54 |
public function elementor_editor_category()
|
55 |
{
|
56 |
-
require_once CP_CALCULATEDFIELDSF_BASE_PATH.'/pagebuilders/elementor_category.pb.php';
|
57 |
} // End elementor_editor
|
58 |
|
59 |
public function elementor_editor()
|
60 |
{
|
61 |
-
|
|
|
62 |
} // End elementor_editor
|
63 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
} // End CPCFF_PAGE_BUILDERS
|
65 |
}
|
7 |
{
|
8 |
class CPCFF_PAGE_BUILDERS
|
9 |
{
|
10 |
+
private static $_instance;
|
11 |
private function __construct(){}
|
12 |
+
private static function instance()
|
13 |
{
|
14 |
+
if(!isset(self::$_instance)) self::$_instance = new self();
|
15 |
+
return self::$_instance;
|
16 |
+
} // End instance
|
17 |
|
18 |
+
public static function run()
|
19 |
+
{
|
20 |
+
$instance = self::instance();
|
21 |
+
add_action('init', array($instance, 'init'));
|
22 |
+
add_action('after_setup_theme', array($instance, 'after_setup_theme'));
|
23 |
+
}
|
24 |
+
|
25 |
+
public function init()
|
26 |
+
{
|
27 |
+
$instance = $instance = self::instance();
|
28 |
+
|
29 |
+
// Gutenberg editor
|
30 |
add_action( 'enqueue_block_editor_assets', array($instance,'gutenberg_editor' ) );
|
31 |
+
|
32 |
+
// Elementor
|
33 |
add_action( 'elementor/widgets/widgets_registered', array($instance, 'elementor_editor') );
|
34 |
add_action( 'elementor/elements/categories_registered', array($instance, 'elementor_editor_category') );
|
35 |
+
} // End init
|
36 |
+
|
37 |
+
public function after_setup_theme()
|
38 |
+
{
|
39 |
+
$instance = $instance = self::instance();
|
40 |
+
|
41 |
+
// SiteOrigin
|
42 |
+
add_filter('siteorigin_widgets_widget_folders', array($instance, 'siteorigin_widgets_collection'));
|
43 |
+
add_filter('siteorigin_panels_widget_dialog_tabs', array($instance, 'siteorigin_panels_widget_dialog_tabs'));
|
44 |
+
} // End after_setup_theme
|
45 |
|
46 |
/**************************** GUTENBERG ****************************/
|
47 |
|
52 |
{
|
53 |
global $wpdb;
|
54 |
|
55 |
+
wp_enqueue_style('cp_calculatedfieldsf_gutenberg_editor_css', plugins_url('/pagebuilders/gutenberg/assets/css/gutenberg.css', CP_CALCULATEDFIELDSF_MAIN_FILE_PATH));
|
56 |
+
wp_enqueue_script('cp_calculatedfieldsf_gutenberg_editor', plugins_url('/pagebuilders/gutenberg/assets/js/gutenberg.js', CP_CALCULATEDFIELDSF_MAIN_FILE_PATH));
|
57 |
|
58 |
$url = CPCFF_AUXILIARY::site_url();
|
59 |
$url .= ((strpos($url, '?') === false) ? '?' : '&').'cff-editor-preview=1&cff-amp-redirected=1&cff-form=';
|
79 |
|
80 |
public function elementor_editor_category()
|
81 |
{
|
82 |
+
require_once CP_CALCULATEDFIELDSF_BASE_PATH.'/pagebuilders/elementor/elementor_category.pb.php';
|
83 |
} // End elementor_editor
|
84 |
|
85 |
public function elementor_editor()
|
86 |
{
|
87 |
+
wp_enqueue_style('cp_calculatedfieldsf_elementor_editor_css', plugins_url('/pagebuilders/elementor/assets/elementor.css', CP_CALCULATEDFIELDSF_MAIN_FILE_PATH));
|
88 |
+
require_once CP_CALCULATEDFIELDSF_BASE_PATH.'/pagebuilders/elementor/elementor.pb.php';
|
89 |
} // End elementor_editor
|
90 |
|
91 |
+
/**************************** ELEMENTOR ****************************/
|
92 |
+
|
93 |
+
public function siteorigin_widgets_collection($folders)
|
94 |
+
{
|
95 |
+
$folders[] = CP_CALCULATEDFIELDSF_BASE_PATH.'/pagebuilders/siteorigin/';
|
96 |
+
return $folders;
|
97 |
+
} // End siteorigin_widgets_collection
|
98 |
+
|
99 |
+
public function siteorigin_panels_widget_dialog_tabs($tabs)
|
100 |
+
{
|
101 |
+
$tabs[] = array(
|
102 |
+
'title' => __('Calculated Fields Form', 'calculated-fields-form'),
|
103 |
+
'filter' => array(
|
104 |
+
'groups' => array('calculated-fields-form')
|
105 |
+
)
|
106 |
+
);
|
107 |
+
|
108 |
+
return $tabs;
|
109 |
+
} // End siteorigin_panels_widget_dialog_tabs
|
110 |
+
|
111 |
} // End CPCFF_PAGE_BUILDERS
|
112 |
}
|
inc/cpcff_session.inc.php
CHANGED
@@ -44,7 +44,7 @@ if( !class_exists( 'CP_SESSION' ) )
|
|
44 |
else
|
45 |
{
|
46 |
$this->session_id = $this->_generate_session_id();
|
47 |
-
$this->expiration =
|
48 |
$this->_set_cookie();
|
49 |
}
|
50 |
|
44 |
else
|
45 |
{
|
46 |
$this->session_id = $this->_generate_session_id();
|
47 |
+
$this->expiration = $this->expiration_interval;
|
48 |
$this->_set_cookie();
|
49 |
}
|
50 |
|
js/fbuilder-pro-public.jquery.js
CHANGED
@@ -568,7 +568,8 @@
|
|
568 |
for( var field_id in form_data )
|
569 |
{
|
570 |
item = form_obj.getItem( field_id+id );
|
571 |
-
if( typeof item[ 'setVal' ] != 'undefined' ) item.setVal( form_data[ field_id ] );
|
|
|
572 |
}
|
573 |
|
574 |
$.fbuilder.showHideDep(
|
568 |
for( var field_id in form_data )
|
569 |
{
|
570 |
item = form_obj.getItem( field_id+id );
|
571 |
+
try{ if( typeof item[ 'setVal' ] != 'undefined' ) item.setVal( form_data[ field_id ] ); }
|
572 |
+
catch(err){}
|
573 |
}
|
574 |
|
575 |
$.fbuilder.showHideDep(
|
js/fields-admin/04_fbuilder.fdate.js
CHANGED
@@ -36,6 +36,10 @@
|
|
36 |
showDatepicker: true,
|
37 |
showTimepicker: false,
|
38 |
|
|
|
|
|
|
|
|
|
39 |
defaultDate:"",
|
40 |
defaultTime:"",
|
41 |
working_dates:[true,true,true,true,true,true,true],
|
@@ -74,6 +78,9 @@
|
|
74 |
}
|
75 |
},
|
76 |
{s:"#sShowDatepicker",e:"click", l:"showDatepicker", f:function(el){return el.is(':checked');}},
|
|
|
|
|
|
|
77 |
{s:"#sMinHour",e:"change keyup", l:"minHour"},
|
78 |
{s:"#sMaxHour",e:"change keyup", l:"maxHour"},
|
79 |
{s:"#sMinMinute",e:"change keyup", l:"minMinute"},
|
@@ -106,8 +113,8 @@
|
|
106 |
{
|
107 |
var str = "";
|
108 |
str += '<div><label>Default date [<a class="helpfbuilder" text="You can put one of the following type of values into this field:\n\nEmpty: Leave empty for current date.\n\nDate: A Fixed date with the same date format indicated in the "Date Format" drop-down field.\n\nNumber: A number of days from today. For example 2 represents two days from today and -1 represents yesterday.\n\nString: A smart text indicating a relative date. Relative dates must contain value (number) and period pairs; valid periods are "y" for years, "m" for months, "w" for weeks, and "d" for days. For example, "+1m +7d" represents one month and seven days from today.">help?</a>]</label><br /><input class="large" name="sDefaultDate" id="sDefaultDate" value="'+$.fbuilder.htmlEncode(this.defaultDate)+'" /></div>';
|
109 |
-
str += '<div><label>Min date [<a class="helpfbuilder" text="You can put one of the following type of values into this field:\n\nEmpty: No min Date.\n\nDate: A Fixed date with the same date format indicated in the "Date Format" drop-down field.\n\nNumber: A number of days from today. For example 2 represents two days from today and -1 represents yesterday.\n\nString: A smart text indicating a relative date. Relative dates must contain value (number) and period pairs; valid periods are "y" for years, "m" for months, "w" for weeks, and "d" for days. For example, "+1m +7d" represents one month and seven days from today.">help?</a>]</label><br /><input class="large" name="sMinDate" id="sMinDate" value="'+$.fbuilder.htmlEncode(this.minDate)+'" /></div>';
|
110 |
-
str += '<div><label>Max date [<a class="helpfbuilder" text="You can put one of the following type of values into this field:\n\nEmpty: No max Date.\n\nDate: A Fixed date with the same date format indicated in the "Date Format" drop-down field.\n\nNumber: A number of days from today. For example 2 represents two days from today and -1 represents yesterday.\n\nString: A smart text indicating a relative date. Relative dates must contain value (number) and period pairs; valid periods are "y" for years, "m" for months, "w" for weeks, and "d" for days. For example, "+1m +7d" represents one month and seven days from today.">help?</a>]</label><br /><input class="large" name="sMaxDate" id="sMaxDate" value="'+$.fbuilder.htmlEncode(this.maxDate)+'" /></div>';
|
111 |
str += '<div><label>Invalid Dates [<a class="helpfbuilder" text="To define some dates as invalid, enter the dates with the format: mm/dd/yyyy separated by comma; for example: 12/31/2014,02/20/2014 or by hyphen for intervals; for example: 12/20/2014-12/28/2014 ">help?</a>]</label><br /><input class="large" name="sInvalidDates" id="sInvalidDates" value="'+$.fbuilder.htmlEncode(this.invalidDates)+'" /></div>';
|
112 |
str += '<div><input type="checkbox" name="sShowDropdown" id="sShowDropdown" '+((this.showDropdown)?"checked":"")+'/><label>Show Dropdown Year and Month</label><div id="divdropdownRange" style="display:'+((this.showDropdown)?"":"none")+'">Year Range [<a class="helpfbuilder" text="The range of years displayed in the year drop-down: either relative to today\'s year ("-nn:+nn"), absolute ("nnnn:nnnn"), or combinations of these formats ("nnnn:-nn")">help?</a>]: <input type="text" name="sDropdownRange" id="sDropdownRange" value="'+$.fbuilder.htmlEncode(this.dropdownRange)+'"/></div></div>';
|
113 |
str += '<div class="working_dates"><label>Selectable dates </label><br /><input name="sWD0" id="sWD0" value="0" type="checkbox" '+((this.working_dates[0])?"checked":"")+'/>Su<input name="sWD1" id="sWD1" value="1" type="checkbox" '+((this.working_dates[1])?"checked":"")+'/>Mo<input name="sWD2" id="sWD2" value="2" type="checkbox" '+((this.working_dates[2])?"checked":"")+'/>Tu<input name="sWD3" id="sWD3" value="3" type="checkbox" '+((this.working_dates[3])?"checked":"")+'/>We<input name="sWD4" id="sWD4" value="4" type="checkbox" '+((this.working_dates[4])?"checked":"")+'/>Th<input name="sWD5" id="sWD5" value="5" type="checkbox" '+((this.working_dates[5])?"checked":"")+'/>Fr<input name="sWD6" id="sWD6" value="6" type="checkbox" '+((this.working_dates[6])?"checked":"")+'/>Sa</div>';
|
@@ -125,6 +132,9 @@
|
|
125 |
|
126 |
str += '<div><label>Steps for hours</label><br /><input class="large" name="sStepHour" id="sStepHour" value="'+$.fbuilder.htmlEncode(this.stepHour)+'" /></div>';
|
127 |
str += '<div><label>Steps for minutes</label><br /><input class="large" name="sStepMinute" id="sStepMinute" value="'+$.fbuilder.htmlEncode(this.stepMinute)+'" /></div>';
|
|
|
|
|
|
|
128 |
str += '</div>';
|
129 |
str += '<hr></hr>';
|
130 |
return str;
|
36 |
showDatepicker: true,
|
37 |
showTimepicker: false,
|
38 |
|
39 |
+
ariaHourLabel: 'hours',
|
40 |
+
ariaMinuteLabel: 'minutes',
|
41 |
+
ariaAMPMLabel: 'am or pm',
|
42 |
+
|
43 |
defaultDate:"",
|
44 |
defaultTime:"",
|
45 |
working_dates:[true,true,true,true,true,true,true],
|
78 |
}
|
79 |
},
|
80 |
{s:"#sShowDatepicker",e:"click", l:"showDatepicker", f:function(el){return el.is(':checked');}},
|
81 |
+
{s:"#sAriaAMPMLabel",e:"change keyup", l:"ariaAMPMLabel"},
|
82 |
+
{s:"#sAriaHourLabel",e:"change keyup", l:"ariaHourLabel"},
|
83 |
+
{s:"#sAriaMinuteLabel",e:"change keyup", l:"ariaMinuteLabel"},
|
84 |
{s:"#sMinHour",e:"change keyup", l:"minHour"},
|
85 |
{s:"#sMaxHour",e:"change keyup", l:"maxHour"},
|
86 |
{s:"#sMinMinute",e:"change keyup", l:"minMinute"},
|
113 |
{
|
114 |
var str = "";
|
115 |
str += '<div><label>Default date [<a class="helpfbuilder" text="You can put one of the following type of values into this field:\n\nEmpty: Leave empty for current date.\n\nDate: A Fixed date with the same date format indicated in the "Date Format" drop-down field.\n\nNumber: A number of days from today. For example 2 represents two days from today and -1 represents yesterday.\n\nString: A smart text indicating a relative date. Relative dates must contain value (number) and period pairs; valid periods are "y" for years, "m" for months, "w" for weeks, and "d" for days. For example, "+1m +7d" represents one month and seven days from today.">help?</a>]</label><br /><input class="large" name="sDefaultDate" id="sDefaultDate" value="'+$.fbuilder.htmlEncode(this.defaultDate)+'" /></div>';
|
116 |
+
str += '<div><label>Min date [<a class="helpfbuilder" text="You can put one of the following type of values into this field:\n\nEmpty: No min Date.\n\nDate: A Fixed date with the same date format indicated in the "Date Format" drop-down field.\n\nField Name: the name of another date field, Ex: fieldname1\n\nNumber: A number of days from today. For example 2 represents two days from today and -1 represents yesterday.\n\nString: A smart text indicating a relative date. Relative dates must contain value (number) and period pairs; valid periods are "y" for years, "m" for months, "w" for weeks, and "d" for days. For example, "+1m +7d" represents one month and seven days from today.">help?</a>]</label><br /><input class="large" name="sMinDate" id="sMinDate" value="'+$.fbuilder.htmlEncode(this.minDate)+'" /></div>';
|
117 |
+
str += '<div><label>Max date [<a class="helpfbuilder" text="You can put one of the following type of values into this field:\n\nEmpty: No max Date.\n\nDate: A Fixed date with the same date format indicated in the "Date Format" drop-down field.\n\nField Name: the name of another date field, Ex: fieldname1\n\nNumber: A number of days from today. For example 2 represents two days from today and -1 represents yesterday.\n\nString: A smart text indicating a relative date. Relative dates must contain value (number) and period pairs; valid periods are "y" for years, "m" for months, "w" for weeks, and "d" for days. For example, "+1m +7d" represents one month and seven days from today.">help?</a>]</label><br /><input class="large" name="sMaxDate" id="sMaxDate" value="'+$.fbuilder.htmlEncode(this.maxDate)+'" /></div>';
|
118 |
str += '<div><label>Invalid Dates [<a class="helpfbuilder" text="To define some dates as invalid, enter the dates with the format: mm/dd/yyyy separated by comma; for example: 12/31/2014,02/20/2014 or by hyphen for intervals; for example: 12/20/2014-12/28/2014 ">help?</a>]</label><br /><input class="large" name="sInvalidDates" id="sInvalidDates" value="'+$.fbuilder.htmlEncode(this.invalidDates)+'" /></div>';
|
119 |
str += '<div><input type="checkbox" name="sShowDropdown" id="sShowDropdown" '+((this.showDropdown)?"checked":"")+'/><label>Show Dropdown Year and Month</label><div id="divdropdownRange" style="display:'+((this.showDropdown)?"":"none")+'">Year Range [<a class="helpfbuilder" text="The range of years displayed in the year drop-down: either relative to today\'s year ("-nn:+nn"), absolute ("nnnn:nnnn"), or combinations of these formats ("nnnn:-nn")">help?</a>]: <input type="text" name="sDropdownRange" id="sDropdownRange" value="'+$.fbuilder.htmlEncode(this.dropdownRange)+'"/></div></div>';
|
120 |
str += '<div class="working_dates"><label>Selectable dates </label><br /><input name="sWD0" id="sWD0" value="0" type="checkbox" '+((this.working_dates[0])?"checked":"")+'/>Su<input name="sWD1" id="sWD1" value="1" type="checkbox" '+((this.working_dates[1])?"checked":"")+'/>Mo<input name="sWD2" id="sWD2" value="2" type="checkbox" '+((this.working_dates[2])?"checked":"")+'/>Tu<input name="sWD3" id="sWD3" value="3" type="checkbox" '+((this.working_dates[3])?"checked":"")+'/>We<input name="sWD4" id="sWD4" value="4" type="checkbox" '+((this.working_dates[4])?"checked":"")+'/>Th<input name="sWD5" id="sWD5" value="5" type="checkbox" '+((this.working_dates[5])?"checked":"")+'/>Fr<input name="sWD6" id="sWD6" value="6" type="checkbox" '+((this.working_dates[6])?"checked":"")+'/>Sa</div>';
|
132 |
|
133 |
str += '<div><label>Steps for hours</label><br /><input class="large" name="sStepHour" id="sStepHour" value="'+$.fbuilder.htmlEncode(this.stepHour)+'" /></div>';
|
134 |
str += '<div><label>Steps for minutes</label><br /><input class="large" name="sStepMinute" id="sStepMinute" value="'+$.fbuilder.htmlEncode(this.stepMinute)+'" /></div>';
|
135 |
+
str += '<div><label>Label for hours in screen readers</label><br /><input class="large" name="sAriaHourLabel" id="sAriaHourLabel" value="'+$.fbuilder.htmlEncode(this.ariaHourLabel)+'" /></div>';
|
136 |
+
str += '<div><label>Label for minutes in screen readers</label><br /><input class="large" name="sAriaMinuteLabel" id="sAriaMinuteLabel" value="'+$.fbuilder.htmlEncode(this.ariaMinuteLabel)+'" /></div>';
|
137 |
+
str += '<div><label>Label for am/pm component in screen readers</label><br /><input class="large" name="sAriaAMPMLabel" id="sAriaAMPMLabel" value="'+$.fbuilder.htmlEncode(this.ariaAMPMLabel)+'" /></div>';
|
138 |
str += '</div>';
|
139 |
str += '<hr></hr>';
|
140 |
return str;
|
js/fields-public/02_fbuilder.fslider.js
CHANGED
@@ -21,17 +21,22 @@
|
|
21 |
caption:"{0}",
|
22 |
_getAttr:function(attr)
|
23 |
{
|
24 |
-
|
25 |
-
|
26 |
-
|
|
|
|
|
|
|
|
|
|
|
27 |
return 0;
|
28 |
},
|
29 |
_setHndl:function(attr, one)
|
30 |
{
|
31 |
-
|
32 |
-
|
|
|
33 |
i = (one) ? 'one' : 'on';
|
34 |
-
var me = this;
|
35 |
$(document)[i]('change', s, function(){ if(me['set_'+attr]) me['set_'+attr](me._getAttr(attr));});
|
36 |
},
|
37 |
_setThousandsSeparator : function(v)
|
@@ -109,7 +114,7 @@
|
|
109 |
},
|
110 |
show:function()
|
111 |
{
|
112 |
-
return '<div class="fields '+this.csslayout+' '+this.name+' cff-slider-field" id="field'+this.form_identifier+'-'+this.index+'"><label for="'+this.name+'">'+this.title+'</label><div class="dfield slider-container"><input id="'+this.name+'" name="'+this.name+'" class="field" type="hidden" value=""/><div id="'+this.name+'_slider" class="slider '+this.size+'"></div><div class="corner-captions '+this.size+'"><span class="left-corner">'+this.minCaption+'</span><span class="right-corner" style="float:right;">'+this.maxCaption+'</span></div><div id="'+this.name+'_caption" class="slider-caption"></div><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
|
113 |
},
|
114 |
set_min : function(v)
|
115 |
{
|
@@ -172,7 +177,7 @@
|
|
172 |
try{ v = JSON.parse(v); }catch(err){}
|
173 |
try{
|
174 |
$( '[name="'+this.name+'"]' ).val( v );
|
175 |
-
$(this.name+'_slider').slider((($.isArray(v)) ? 'values' : 'value'), v);
|
176 |
this._setFieldValue();
|
177 |
}catch( err ){}
|
178 |
}
|
21 |
caption:"{0}",
|
22 |
_getAttr:function(attr)
|
23 |
{
|
24 |
+
var me = this, f, v = $.trim(me[attr]);
|
25 |
+
if($.isNumeric(v)) return parseFloat(v);
|
26 |
+
f = (/^fieldname\d+$/i.test(v)) ? me.getField(v) : false;
|
27 |
+
if(f)
|
28 |
+
{
|
29 |
+
v = f.val();
|
30 |
+
if($.isNumeric(v)) return parseFloat(v);
|
31 |
+
}
|
32 |
return 0;
|
33 |
},
|
34 |
_setHndl:function(attr, one)
|
35 |
{
|
36 |
+
var me = this, v = $.trim(me[attr]);
|
37 |
+
if($.isNumeric(v)) return;
|
38 |
+
var s = (/^fieldname\d+$/i.test(v)) ? '[id*="'+v+me.form_identifier+'"]' : v,
|
39 |
i = (one) ? 'one' : 'on';
|
|
|
40 |
$(document)[i]('change', s, function(){ if(me['set_'+attr]) me['set_'+attr](me._getAttr(attr));});
|
41 |
},
|
42 |
_setThousandsSeparator : function(v)
|
114 |
},
|
115 |
show:function()
|
116 |
{
|
117 |
+
return '<div class="fields '+this.csslayout+' '+this.name+' cff-slider-field" id="field'+this.form_identifier+'-'+this.index+'"><label for="'+this.name+'">'+this.title+'</label><div class="dfield slider-container"><input id="'+this.name+'" name="'+this.name+'" class="field" type="hidden" value="'+$.fbuilder.htmlEncode(this._getAttr('predefined'))+'"/><div id="'+this.name+'_slider" class="slider '+this.size+'"></div><div class="corner-captions '+this.size+'"><span class="left-corner">'+this.minCaption+'</span><span class="right-corner" style="float:right;">'+this.maxCaption+'</span></div><div id="'+this.name+'_caption" class="slider-caption"></div><span class="uh">'+this.userhelp+'</span></div><div class="clearer"></div></div>';
|
118 |
},
|
119 |
set_min : function(v)
|
120 |
{
|
177 |
try{ v = JSON.parse(v); }catch(err){}
|
178 |
try{
|
179 |
$( '[name="'+this.name+'"]' ).val( v );
|
180 |
+
$('#'+this.name+'_slider').slider((($.isArray(v)) ? 'values' : 'value'), v);
|
181 |
this._setFieldValue();
|
182 |
}catch( err ){}
|
183 |
}
|
js/fields-public/04_fbuilder.fdate.js
CHANGED
@@ -28,28 +28,103 @@
|
|
28 |
showDatepicker: true,
|
29 |
showTimepicker: false,
|
30 |
|
|
|
|
|
|
|
|
|
31 |
defaultDate:"",
|
32 |
defaultTime:"",
|
33 |
working_dates:[true,true,true,true,true,true,true],
|
34 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
{
|
36 |
-
var me = this;
|
37 |
-
|
38 |
{
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
me.
|
50 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
|
|
|
|
|
52 |
me.invalidDates = me.invalidDates.replace( /\s+/g, '' );
|
|
|
53 |
if( !/^\s*$/.test( me.invalidDates ) )
|
54 |
{
|
55 |
var dateRegExp = new RegExp( /^\d{1,2}\/\d{1,2}\/\d{4}$/ ),
|
@@ -86,6 +161,18 @@
|
|
86 |
}
|
87 |
}
|
88 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
89 |
},
|
90 |
get_hours:function()
|
91 |
{
|
@@ -98,12 +185,11 @@
|
|
98 |
|
99 |
while( ( h = from + me.stepHour * i ) <= to )
|
100 |
{
|
101 |
-
|
102 |
if( h < 10 ) h = '0'+''+h;
|
103 |
str += '<option value="' + h + '">' + h + '</option>';
|
104 |
i++;
|
105 |
}
|
106 |
-
return '<select id="'+me.name+'_hours" name="'+me.name+'_hours" class="hours-component">' + str + '</select>:';
|
107 |
},
|
108 |
get_minutes:function()
|
109 |
{
|
@@ -120,18 +206,18 @@
|
|
120 |
str += '<option value="' + m + '">' + m + '</option>';
|
121 |
i++;
|
122 |
}
|
123 |
-
return '<select id="'+me.name+'_minutes" name="'+me.name+'_minutes" class="minutes-component">' + str + '</select>';
|
124 |
},
|
125 |
get_ampm:function()
|
126 |
{
|
127 |
var str = '';
|
128 |
if( this.tformat == 12 )
|
129 |
{
|
130 |
-
return '<select id="'+this.name+'_ampm" class="ampm-component"><option value="am">am</option><option value="pm">pm</option></select>';
|
131 |
}
|
132 |
return str;
|
133 |
},
|
134 |
-
|
135 |
{
|
136 |
var me = this,
|
137 |
str = $( '#'+me.name+'_date' ).val();
|
@@ -150,57 +236,52 @@
|
|
150 |
}
|
151 |
$( '#'+me.name ).val( str ).change();
|
152 |
},
|
153 |
-
|
154 |
{
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
|
168 |
-
|
|
|
169 |
},
|
170 |
-
|
171 |
{
|
172 |
var me = this,
|
173 |
p = {
|
174 |
dateFormat: me.dformat.replace(/yyyy/g,"yy"),
|
175 |
-
minDate: me.minDate,
|
176 |
-
maxDate: me.maxDate
|
177 |
},
|
178 |
dp = $( "#"+me.name+"_date" ),
|
179 |
dd = (me.defaultDate != "") ? me.defaultDate : ( ( me.predefined != "" ) ? me.predefined : new Date() );
|
180 |
|
181 |
dp.click( function(){ $(document).click(); $(this).focus(); } );
|
182 |
-
if
|
183 |
-
{
|
184 |
-
|
185 |
-
p = $.extend(p,{changeMonth: true,changeYear: true,yearRange: me.dropdownRange});
|
186 |
-
}
|
187 |
-
p = $.extend(p, { beforeShowDay: ( function ( w, i ) { return function( d ){ return [me.validateDate( d, w, i ), ""]; }; } )( me.working_dates, me.invalidDates ) } );
|
188 |
dp.datepicker(p);
|
189 |
-
if(
|
190 |
-
if(
|
191 |
-
{
|
192 |
-
dp.datepicker( "setDate", '');
|
193 |
-
}
|
194 |
},
|
195 |
-
|
196 |
{
|
197 |
-
var me
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
|
205 |
if( me.showTimepicker )
|
206 |
{
|
@@ -219,66 +300,32 @@
|
|
219 |
if(time[ 'hour' ] == me.maxHour) time[ 'minute' ] = Math.min(time['minute'],me.maxMinute);
|
220 |
}
|
221 |
|
222 |
-
|
223 |
me.name+'_hours',
|
224 |
( me.tformat == 12 ) ? ( ( time[ 'hour' ] > 12 ) ? time[ 'hour' ] - 12 : ( ( time[ 'hour' ] == 0 ) ? 12 : time[ 'hour' ] ) ) : time[ 'hour' ],
|
225 |
( me.tformat == 12 ) ? 12 : me.maxHour
|
226 |
);
|
227 |
|
228 |
-
|
229 |
$( '#'+me.name+'_ampm'+' [value="' + ( ( time[ 'hour' ] < 12 ) ? 'am' : 'pm' ) + '"]' ).prop( 'selected', true );
|
230 |
}
|
231 |
},
|
232 |
-
|
233 |
{
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
|
|
|
|
239 |
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
|
245 |
-
|
246 |
-
},
|
247 |
-
validateDate: function( d, w, i )
|
248 |
-
{
|
249 |
-
try{
|
250 |
-
if( d === null || !w[ d.getDay()] ) return false;
|
251 |
-
if( i !== null )
|
252 |
-
{
|
253 |
-
for( var j = 0, h = i.length; j < h; j++ )
|
254 |
-
{
|
255 |
-
if( d.getDate() == i[ j ].getDate() && d.getMonth() == i[ j ].getMonth() && d.getFullYear() == i[ j ].getFullYear() ) return false;
|
256 |
-
}
|
257 |
-
}
|
258 |
-
}
|
259 |
-
catch( _err ){}
|
260 |
-
return true;
|
261 |
-
},
|
262 |
-
validateTime : function( e, i )
|
263 |
-
{
|
264 |
-
if( i.showTimepicker )
|
265 |
-
{
|
266 |
-
var base = e.name.replace( '_date', '' ),
|
267 |
-
h = $('#'+base+'_hours').val(),
|
268 |
-
m = $('#'+base+'_minutes').val();
|
269 |
-
if( i.tformat == 12 )
|
270 |
-
{
|
271 |
-
if( $('#'+base+'_ampm').val() == 'pm' && h != 12 ) h = h*1 + 12;
|
272 |
-
if( $('#'+base+'_ampm').val() == 'am' && h == 12 ) h = 0;
|
273 |
-
}
|
274 |
-
if(
|
275 |
-
h < i.minHour ||
|
276 |
-
i.maxHour < h ||
|
277 |
-
(h == i.minHour && m < i.minMinute) ||
|
278 |
-
(h == i.maxHour && i.maxMinute < m)
|
279 |
-
) return false;
|
280 |
-
}
|
281 |
-
return true;
|
282 |
},
|
283 |
after_show:function()
|
284 |
{
|
@@ -307,8 +354,8 @@
|
|
307 |
(
|
308 |
( minDate == null || date >= minDate ) &&
|
309 |
( maxDate == null || date <= maxDate ) &&
|
310 |
-
item.
|
311 |
-
item.
|
312 |
);
|
313 |
}
|
314 |
return true;
|
@@ -321,10 +368,10 @@
|
|
321 |
|
322 |
if(!(date_format in $.validator.methods)) $.validator.addMethod(date_format, validator );
|
323 |
|
324 |
-
me.
|
325 |
-
me.
|
326 |
-
me.
|
327 |
-
me.
|
328 |
},
|
329 |
val:function(raw)
|
330 |
{
|
@@ -370,14 +417,8 @@
|
|
370 |
break;
|
371 |
}
|
372 |
|
373 |
-
if( me.showTimepicker )
|
374 |
-
|
375 |
-
return date.valueOf() / 86400000;
|
376 |
-
}
|
377 |
-
else
|
378 |
-
{
|
379 |
-
return Math.ceil( date.valueOf() / 86400000 );
|
380 |
-
}
|
381 |
}
|
382 |
}
|
383 |
return 0;
|
@@ -390,13 +431,13 @@
|
|
390 |
.replace( /\s+/g, ' ' )
|
391 |
.split( ' ' );
|
392 |
this.defaultDate = v[ 0 ];
|
393 |
-
this.
|
394 |
if( v.length == 2 )
|
395 |
{
|
396 |
this.defaultTime = v[ 1 ];
|
397 |
-
this.
|
398 |
}
|
399 |
-
this.
|
400 |
}
|
401 |
catch( err )
|
402 |
{}
|
28 |
showDatepicker: true,
|
29 |
showTimepicker: false,
|
30 |
|
31 |
+
ariaHourLabel: 'hours',
|
32 |
+
ariaMinuteLabel: 'minutes',
|
33 |
+
ariaAMPMLabel: 'am or pm',
|
34 |
+
|
35 |
defaultDate:"",
|
36 |
defaultTime:"",
|
37 |
working_dates:[true,true,true,true,true,true,true],
|
38 |
+
|
39 |
+
_getAttr:function(attr)
|
40 |
+
{
|
41 |
+
var me = this, f, v = $.trim(me[attr]);
|
42 |
+
if($.isNumeric(v)) return parseFloat(v);
|
43 |
+
f = (/^fieldname\d+$/i.test(v)) ? me.getField(v) : false;
|
44 |
+
if(f)
|
45 |
+
{
|
46 |
+
v = f.val();
|
47 |
+
if(f.ftype == 'fdate') return new Date(v*86400000);
|
48 |
+
if($.isNumeric(v)) return parseFloat(v);
|
49 |
+
return v.replace(/^"+/, '').replace(/"+$/, '');
|
50 |
+
}
|
51 |
+
return v;
|
52 |
+
},
|
53 |
+
_setHndl:function(attr, one)
|
54 |
{
|
55 |
+
var me = this, v = $.trim(me[attr]);
|
56 |
+
if(/^fieldname\d+$/i.test(v))
|
57 |
{
|
58 |
+
var s = '[id*="'+v+me.form_identifier+'"]',
|
59 |
+
i = (one) ? 'one' : 'on';
|
60 |
+
$(document)[i]('change', s, function(){ if(me['set_'+attr]) me['set_'+attr](me._getAttr(attr));});
|
61 |
}
|
62 |
+
},
|
63 |
+
_set_Events : function()
|
64 |
+
{
|
65 |
+
var me = this,
|
66 |
+
f = function(){
|
67 |
+
$( '#'+me.name+'_date' ).valid();
|
68 |
+
me.set_dateTime();
|
69 |
+
};
|
70 |
|
71 |
+
$( document ).on( 'change', '#'+me.name+'_date', function(){ f(); } );
|
72 |
+
$( document ).on( 'change', '#'+me.name+'_hours', function(){ f(); } );
|
73 |
+
$( document ).on( 'change', '#'+me.name+'_minutes', function(){ f(); } );
|
74 |
+
$( document ).on( 'change', '#'+me.name+'_ampm', function(){ f(); } );
|
75 |
+
|
76 |
+
$( '#cp_calculatedfieldsf_pform'+me.form_identifier ).bind( 'reset', function(){ setTimeout( function(){ me.set_DefaultDate(); me.set_DefaultTime(); me.set_dateTime(); }, 500 ); } );
|
77 |
+
},
|
78 |
+
_validateDate: function( d, w, i )
|
79 |
+
{
|
80 |
+
try{
|
81 |
+
if( d === null || !w[ d.getDay()] ) return false;
|
82 |
+
if( i !== null )
|
83 |
+
{
|
84 |
+
for( var j = 0, h = i.length; j < h; j++ )
|
85 |
+
{
|
86 |
+
if( d.getDate() == i[ j ].getDate() && d.getMonth() == i[ j ].getMonth() && d.getFullYear() == i[ j ].getFullYear() ) return false;
|
87 |
+
}
|
88 |
+
}
|
89 |
+
}
|
90 |
+
catch( _err ){}
|
91 |
+
return true;
|
92 |
+
},
|
93 |
+
_validateTime : function( e, i )
|
94 |
+
{
|
95 |
+
if( i.showTimepicker )
|
96 |
+
{
|
97 |
+
var base = e.name.replace( '_date', '' ),
|
98 |
+
h = $('#'+base+'_hours').val(),
|
99 |
+
m = $('#'+base+'_minutes').val();
|
100 |
+
if( i.tformat == 12 )
|
101 |
+
{
|
102 |
+
if( $('#'+base+'_ampm').val() == 'pm' && h != 12 ) h = h*1 + 12;
|
103 |
+
if( $('#'+base+'_ampm').val() == 'am' && h == 12 ) h = 0;
|
104 |
+
}
|
105 |
+
if(
|
106 |
+
h < i.minHour ||
|
107 |
+
i.maxHour < h ||
|
108 |
+
(h == i.minHour && m < i.minMinute) ||
|
109 |
+
(h == i.maxHour && i.maxMinute < m)
|
110 |
+
) return false;
|
111 |
+
}
|
112 |
+
return true;
|
113 |
+
},
|
114 |
+
init:function()
|
115 |
+
{
|
116 |
+
var me = this,
|
117 |
+
_checkValue = function( v, min, max )
|
118 |
+
{
|
119 |
+
v = parseInt( v );
|
120 |
+
v = ( isNaN( v ) ) ? max : v;
|
121 |
+
return Math.min(Math.max(v,min),max);
|
122 |
+
};
|
123 |
|
124 |
+
// Date
|
125 |
+
me.dformat = me.dformat.replace(/\//g, me.dseparator);
|
126 |
me.invalidDates = me.invalidDates.replace( /\s+/g, '' );
|
127 |
+
if( me.dropdownRange.indexOf( ':' ) == -1 ) me.dropdownRange = '-10:+10';
|
128 |
if( !/^\s*$/.test( me.invalidDates ) )
|
129 |
{
|
130 |
var dateRegExp = new RegExp( /^\d{1,2}\/\d{1,2}\/\d{4}$/ ),
|
161 |
}
|
162 |
}
|
163 |
}
|
164 |
+
|
165 |
+
// Time
|
166 |
+
me.minHour = _checkValue( me.minHour, 0, 23 );
|
167 |
+
me.maxHour = _checkValue( me.maxHour, 0, 23 );
|
168 |
+
me.minMinute = _checkValue( me.minMinute, 0, 59 );
|
169 |
+
me.maxMinute = _checkValue( me.maxMinute, 0, 59 );
|
170 |
+
me.stepHour = _checkValue( me.stepHour, 1, Math.max( 1, me.maxHour - me.minHour ) );
|
171 |
+
me.stepMinute = _checkValue( me.stepMinute, 1, Math.max( 1, me.maxMinute - me.minMinute ) );
|
172 |
+
|
173 |
+
// Set handles
|
174 |
+
me._setHndl('minDate');
|
175 |
+
me._setHndl('maxDate');
|
176 |
},
|
177 |
get_hours:function()
|
178 |
{
|
185 |
|
186 |
while( ( h = from + me.stepHour * i ) <= to )
|
187 |
{
|
|
|
188 |
if( h < 10 ) h = '0'+''+h;
|
189 |
str += '<option value="' + h + '">' + h + '</option>';
|
190 |
i++;
|
191 |
}
|
192 |
+
return '<select id="'+me.name+'_hours" name="'+me.name+'_hours" class="hours-component" aria-label="'+$.fbuilder.htmlEncode(me.ariaHourLabel)+'">' + str + '</select>:';
|
193 |
},
|
194 |
get_minutes:function()
|
195 |
{
|
206 |
str += '<option value="' + m + '">' + m + '</option>';
|
207 |
i++;
|
208 |
}
|
209 |
+
return '<select id="'+me.name+'_minutes" name="'+me.name+'_minutes" class="minutes-component" aria-label="'+$.fbuilder.htmlEncode(me.ariaMinuteLabel)+'">' + str + '</select>';
|
210 |
},
|
211 |
get_ampm:function()
|
212 |
{
|
213 |
var str = '';
|
214 |
if( this.tformat == 12 )
|
215 |
{
|
216 |
+
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>';
|
217 |
}
|
218 |
return str;
|
219 |
},
|
220 |
+
set_dateTime:function()
|
221 |
{
|
222 |
var me = this,
|
223 |
str = $( '#'+me.name+'_date' ).val();
|
236 |
}
|
237 |
$( '#'+me.name ).val( str ).change();
|
238 |
},
|
239 |
+
set_minDate:function(v)
|
240 |
{
|
241 |
+
var e = $('[id*="'+this.name+'"].hasDatepicker');
|
242 |
+
if(e.length)
|
243 |
+
{
|
244 |
+
e.datepicker('option', 'minDate', v);
|
245 |
+
e.change();
|
246 |
+
}
|
247 |
+
},
|
248 |
+
set_maxDate:function(v)
|
249 |
+
{
|
250 |
+
var e = $('[id*="'+this.name+'"].hasDatepicker');
|
251 |
+
if(e.length)
|
252 |
+
{
|
253 |
+
e.datepicker('option', 'maxDate', v);
|
254 |
+
e.change();
|
255 |
+
}
|
256 |
},
|
257 |
+
set_DefaultDate : function()
|
258 |
{
|
259 |
var me = this,
|
260 |
p = {
|
261 |
dateFormat: me.dformat.replace(/yyyy/g,"yy"),
|
262 |
+
minDate: me._getAttr('minDate'),
|
263 |
+
maxDate: me._getAttr('maxDate')
|
264 |
},
|
265 |
dp = $( "#"+me.name+"_date" ),
|
266 |
dd = (me.defaultDate != "") ? me.defaultDate : ( ( me.predefined != "" ) ? me.predefined : new Date() );
|
267 |
|
268 |
dp.click( function(){ $(document).click(); $(this).focus(); } );
|
269 |
+
if(me.showDropdown ) p = $.extend(p,{changeMonth: true,changeYear: true,yearRange: me.dropdownRange});
|
270 |
+
p = $.extend(p, {beforeShowDay:(function(w,i) { return function(d){return [me._validateDate(d, w, i), ""];};})(me.working_dates, me.invalidDates)});
|
271 |
+
|
|
|
|
|
|
|
272 |
dp.datepicker(p);
|
273 |
+
if(!me.predefinedClick) dp.datepicker( "setDate", dd);
|
274 |
+
if(!me._validateDate(dp.datepicker("getDate"), me.working_dates, me.invalidDates)) dp.datepicker( "setDate", '');
|
|
|
|
|
|
|
275 |
},
|
276 |
+
set_DefaultTime : function()
|
277 |
{
|
278 |
+
var me = this,
|
279 |
+
_setValue = function( f, v, m )
|
280 |
+
{
|
281 |
+
v = Math.min( v*1, m*1 );
|
282 |
+
v = ( v < 10 ) ? 0+''+v : v;
|
283 |
+
$( '#' + f + ' [value="' + v + '"]' ).prop( 'selected', true );
|
284 |
+
};
|
285 |
|
286 |
if( me.showTimepicker )
|
287 |
{
|
300 |
if(time[ 'hour' ] == me.maxHour) time[ 'minute' ] = Math.min(time['minute'],me.maxMinute);
|
301 |
}
|
302 |
|
303 |
+
_setValue(
|
304 |
me.name+'_hours',
|
305 |
( me.tformat == 12 ) ? ( ( time[ 'hour' ] > 12 ) ? time[ 'hour' ] - 12 : ( ( time[ 'hour' ] == 0 ) ? 12 : time[ 'hour' ] ) ) : time[ 'hour' ],
|
306 |
( me.tformat == 12 ) ? 12 : me.maxHour
|
307 |
);
|
308 |
|
309 |
+
_setValue( me.name+'_minutes', time[ 'minute' ], me.maxMinute );
|
310 |
$( '#'+me.name+'_ampm'+' [value="' + ( ( time[ 'hour' ] < 12 ) ? 'am' : 'pm' ) + '"]' ).prop( 'selected', true );
|
311 |
}
|
312 |
},
|
313 |
+
show:function()
|
314 |
{
|
315 |
+
var me = this,
|
316 |
+
n = me.name,
|
317 |
+
attr = 'value',
|
318 |
+
format_label = [],
|
319 |
+
date_tag_type = 'text',
|
320 |
+
disabled = '',
|
321 |
+
date_tag_class = 'field date'+me.dformat.replace(/[^a-z]/ig,"")+' '+me.size+((me.required)?' required': '');
|
322 |
|
323 |
+
if( me.predefinedClick ) attr = 'placeholder';
|
324 |
+
if( me.showDatepicker ) format_label.push(me.dformat);
|
325 |
+
else{ date_tag_type = 'hidden'; disabled='disabled';}
|
326 |
+
if( me.showTimepicker ) format_label.push('HH:mm');
|
327 |
|
328 |
+
return '<div class="fields '+me.csslayout+' '+n+' cff-date-field" id="field'+me.form_identifier+'-'+me.index+'"><label for="'+n+'_date">'+me.title+''+((me.required)?"<span class='r'>*</span>":"")+( (format_label.length) ? ' <span class="dformat">('+format_label.join(' ')+')</span>' : '' )+'</label><div class="dfield"><input id="'+n+'" name="'+n+'" type="hidden" value="'+$.fbuilder.htmlEncode(me.predefined)+'"/><input id="'+n+'_date" name="'+n+'_date" class="'+date_tag_class+' date-component" type="'+date_tag_type+'" '+attr+'="'+$.fbuilder.htmlEncode(me.predefined)+'" '+disabled+' />'+( ( me.showTimepicker ) ? ' '+me.get_hours()+me.get_minutes()+' '+me.get_ampm() : '' )+'<span class="uh">'+me.userhelp+'</span></div><div class="clearer"></div></div>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
329 |
},
|
330 |
after_show:function()
|
331 |
{
|
354 |
(
|
355 |
( minDate == null || date >= minDate ) &&
|
356 |
( maxDate == null || date <= maxDate ) &&
|
357 |
+
item._validateDate( $( e ).datepicker( 'getDate' ), item.working_dates, item.invalidDates ) &&
|
358 |
+
item._validateTime( e, item )
|
359 |
);
|
360 |
}
|
361 |
return true;
|
368 |
|
369 |
if(!(date_format in $.validator.methods)) $.validator.addMethod(date_format, validator );
|
370 |
|
371 |
+
me.set_DefaultDate();
|
372 |
+
me.set_DefaultTime();
|
373 |
+
me._set_Events();
|
374 |
+
me.set_dateTime();
|
375 |
},
|
376 |
val:function(raw)
|
377 |
{
|
417 |
break;
|
418 |
}
|
419 |
|
420 |
+
if( me.showTimepicker ) return date.valueOf() / 86400000;
|
421 |
+
else return Math.ceil( date.valueOf() / 86400000 );
|
|
|
|
|
|
|
|
|
|
|
|
|
422 |
}
|
423 |
}
|
424 |
return 0;
|
431 |
.replace( /\s+/g, ' ' )
|
432 |
.split( ' ' );
|
433 |
this.defaultDate = v[ 0 ];
|
434 |
+
this.set_DefaultDate();
|
435 |
if( v.length == 2 )
|
436 |
{
|
437 |
this.defaultTime = v[ 1 ];
|
438 |
+
this.set_DefaultTime();
|
439 |
}
|
440 |
+
this.set_dateTime();
|
441 |
}
|
442 |
catch( err )
|
443 |
{}
|
js/fields-public/06_fbuilder.fcheck.js
CHANGED
@@ -65,6 +65,7 @@
|
|
65 |
var checked = e.checked;
|
66 |
for( var j = 0, k = me.choicesDep[ i ].length; j < k; j++)
|
67 |
{
|
|
|
68 |
var dep = me.choicesDep[i][j]+form_identifier;
|
69 |
if( isHidden || !checked)
|
70 |
{
|
65 |
var checked = e.checked;
|
66 |
for( var j = 0, k = me.choicesDep[ i ].length; j < k; j++)
|
67 |
{
|
68 |
+
if(!/fieldname/i.test(me.choicesDep[i][j])) continue;
|
69 |
var dep = me.choicesDep[i][j]+form_identifier;
|
70 |
if( isHidden || !checked)
|
71 |
{
|
js/fields-public/07_fbuilder.fradio.js
CHANGED
@@ -72,6 +72,7 @@
|
|
72 |
var checked = e.checked;
|
73 |
for( var j = 0, k = me.choicesDep[ i ].length; j < k; j++)
|
74 |
{
|
|
|
75 |
var dep = me.choicesDep[i][j]+form_identifier;
|
76 |
if(isHidden || !checked)
|
77 |
{
|
72 |
var checked = e.checked;
|
73 |
for( var j = 0, k = me.choicesDep[ i ].length; j < k; j++)
|
74 |
{
|
75 |
+
if(!/fieldname/i.test(me.choicesDep[i][j])) continue;
|
76 |
var dep = me.choicesDep[i][j]+form_identifier;
|
77 |
if(isHidden || !checked)
|
78 |
{
|
js/fields-public/08_fbuilder.fdropdown.js
CHANGED
@@ -77,6 +77,7 @@
|
|
77 |
{
|
78 |
for( var j = 0, k = me.choicesDep[ i ].length; j < k; j++)
|
79 |
{
|
|
|
80 |
var dep = me.choicesDep[i][j]+form_identifier;
|
81 |
if( isHidden || $.inArray(i,selected) == -1)
|
82 |
{
|
77 |
{
|
78 |
for( var j = 0, k = me.choicesDep[ i ].length; j < k; j++)
|
79 |
{
|
80 |
+
if(!/fieldname/i.test(me.choicesDep[i][j])) continue;
|
81 |
var dep = me.choicesDep[i][j]+form_identifier;
|
82 |
if( isHidden || $.inArray(i,selected) == -1)
|
83 |
{
|
js/fields-public/28_fbuilder.fcontainer.js
CHANGED
@@ -25,6 +25,7 @@
|
|
25 |
|
26 |
for( var i = 0, h = me.fields.length; i < h; i++ )
|
27 |
{
|
|
|
28 |
fId = me.fields[ i ]+me.form_identifier;
|
29 |
if( isHidden )
|
30 |
{
|
25 |
|
26 |
for( var i = 0, h = me.fields.length; i < h; i++ )
|
27 |
{
|
28 |
+
if(!/fieldname/i.test(me.fields[ i ])) continue;
|
29 |
fId = me.fields[ i ]+me.form_identifier;
|
30 |
if( isHidden )
|
31 |
{
|
js/fields-public/fbuilder.fcalculated.js
CHANGED
@@ -117,6 +117,7 @@
|
|
117 |
|
118 |
for ( i=0; i<d.length; i++ )
|
119 |
{
|
|
|
120 |
dep = d[i]+identifier;
|
121 |
delete toHide[ dep ];
|
122 |
if( typeof toShow[ dep ] == 'undefined' )
|
@@ -132,6 +133,7 @@
|
|
132 |
|
133 |
for ( i=0; i<n.length; i++ )
|
134 |
{
|
|
|
135 |
dep = n[i]+identifier;
|
136 |
clearRef(dep);
|
137 |
if (
|
117 |
|
118 |
for ( i=0; i<d.length; i++ )
|
119 |
{
|
120 |
+
if(!/fieldname/i.test(d[i])) continue;
|
121 |
dep = d[i]+identifier;
|
122 |
delete toHide[ dep ];
|
123 |
if( typeof toShow[ dep ] == 'undefined' )
|
133 |
|
134 |
for ( i=0; i<n.length; i++ )
|
135 |
{
|
136 |
+
if(!/fieldname/i.test(n[i])) continue;
|
137 |
dep = n[i]+identifier;
|
138 |
clearRef(dep);
|
139 |
if (
|
pagebuilders/elementor/assets/elementor.css
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.cff-widefat *{
|
2 |
+
width: 100% !important;
|
3 |
+
clear: both !important;
|
4 |
+
display: block !important;
|
5 |
+
max-width: 100% !important;
|
6 |
+
margin: 0 !important;
|
7 |
+
}
|
pagebuilders/{elementor.pb.php → elementor/elementor.pb.php}
RENAMED
@@ -58,6 +58,7 @@ class Elementor_CFF_Widget extends Widget_Base
|
|
58 |
array(
|
59 |
'label' => __('Select a form', 'calculated-fields-form'),
|
60 |
'type' => Controls_Manager::SELECT,
|
|
|
61 |
'options' => $options,
|
62 |
'default' => $default
|
63 |
)
|
@@ -68,6 +69,7 @@ class Elementor_CFF_Widget extends Widget_Base
|
|
68 |
array(
|
69 |
'label' => __('Additional attributes', 'calculated-fields-form'),
|
70 |
'type' => Controls_Manager::TEXT,
|
|
|
71 |
'input_type' => 'text',
|
72 |
'placeholder' => 'attr="value"'
|
73 |
)
|
@@ -170,6 +172,7 @@ class Elementor_CFFV_Widget extends Widget_Shortcode
|
|
170 |
array(
|
171 |
'label' => __( 'Variable shortcode', 'calculated-fields-form' ),
|
172 |
'type' => Controls_Manager::TEXT,
|
|
|
173 |
'input_type' => 'text',
|
174 |
'default' => '[CP_CALCULATED_FIELDS_VAR name="varname"]',
|
175 |
'description' => '<a href="https://cff.dwbooster.com/documentation#javascript-variables" target="_blank">'.__( 'I need help [+]', 'calculated-fields-form' ).'</a>'
|
58 |
array(
|
59 |
'label' => __('Select a form', 'calculated-fields-form'),
|
60 |
'type' => Controls_Manager::SELECT,
|
61 |
+
'classes' => 'cff-widefat',
|
62 |
'options' => $options,
|
63 |
'default' => $default
|
64 |
)
|
69 |
array(
|
70 |
'label' => __('Additional attributes', 'calculated-fields-form'),
|
71 |
'type' => Controls_Manager::TEXT,
|
72 |
+
'classes' => 'cff-widefat',
|
73 |
'input_type' => 'text',
|
74 |
'placeholder' => 'attr="value"'
|
75 |
)
|
172 |
array(
|
173 |
'label' => __( 'Variable shortcode', 'calculated-fields-form' ),
|
174 |
'type' => Controls_Manager::TEXT,
|
175 |
+
'classes' => 'cff-widefat',
|
176 |
'input_type' => 'text',
|
177 |
'default' => '[CP_CALCULATED_FIELDS_VAR name="varname"]',
|
178 |
'description' => '<a href="https://cff.dwbooster.com/documentation#javascript-variables" target="_blank">'.__( 'I need help [+]', 'calculated-fields-form' ).'</a>'
|
pagebuilders/{elementor_category.pb.php → elementor/elementor_category.pb.php}
RENAMED
File without changes
|
{css → pagebuilders/gutenberg/assets/css}/gutenberg.css
RENAMED
File without changes
|
js/cp_calculatedfieldsf_gutenberg.js → pagebuilders/gutenberg/assets/js/gutenberg.js
RENAMED
@@ -93,7 +93,6 @@ jQuery(function()
|
|
93 |
config = {key: key, value: form_id};
|
94 |
|
95 |
if( /^\s*$/.test(id)) id = form_id;
|
96 |
-
if(id == form_id) config['selected'] = 'selected';
|
97 |
options.push(el('option', config, cpcff_gutenberg_editor_config['forms'][form_id]));
|
98 |
}
|
99 |
generate_shortcode();
|
@@ -101,8 +100,8 @@ jQuery(function()
|
|
101 |
if(!/^\s*$/.test(id))
|
102 |
{
|
103 |
children.push(
|
104 |
-
el( 'div', {className: 'cff-iframe-container'},
|
105 |
-
el('div', {className: 'cff-iframe-overlay'}),
|
106 |
el('iframe',
|
107 |
{
|
108 |
key: 'cpcff_form_iframe',
|
@@ -171,7 +170,8 @@ jQuery(function()
|
|
171 |
{
|
172 |
key : 'cpcff_inspector_forms_list',
|
173 |
style : {width: '100%'},
|
174 |
-
onChange : set_attributes
|
|
|
175 |
},
|
176 |
options
|
177 |
),
|
93 |
config = {key: key, value: form_id};
|
94 |
|
95 |
if( /^\s*$/.test(id)) id = form_id;
|
|
|
96 |
options.push(el('option', config, cpcff_gutenberg_editor_config['forms'][form_id]));
|
97 |
}
|
98 |
generate_shortcode();
|
100 |
if(!/^\s*$/.test(id))
|
101 |
{
|
102 |
children.push(
|
103 |
+
el( 'div', {className: 'cff-iframe-container', key: 'cpcff_form_container'},
|
104 |
+
el('div', {className: 'cff-iframe-overlay', key: 'cpcff_form_overlay'}),
|
105 |
el('iframe',
|
106 |
{
|
107 |
key: 'cpcff_form_iframe',
|
170 |
{
|
171 |
key : 'cpcff_inspector_forms_list',
|
172 |
style : {width: '100%'},
|
173 |
+
onChange : set_attributes,
|
174 |
+
value: id
|
175 |
},
|
176 |
options
|
177 |
),
|
pagebuilders/siteorigin/siteorigin-cpcff-variable/assets/banner.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M0 0h24v24H0z" fill="none"/><path d="M7.77 6.76L6.23 5.48.82 12l5.41 6.52 1.54-1.28L3.42 12l4.35-5.24zM7 13h2v-2H7v2zm10-2h-2v2h2v-2zm-6 2h2v-2h-2v2zm6.77-7.52l-1.54 1.28L20.58 12l-4.35 5.24 1.54 1.28L23.18 12l-5.41-6.52z" fill="#3391C9" /></svg>
|
pagebuilders/siteorigin/siteorigin-cpcff-variable/siteorigin-cpcff-variable.php
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Widget Name: Calculated Fields Form Variable Shortcode
|
4 |
+
Description: Insert a javascript generator shortcode on page.
|
5 |
+
Documentation: https://cff.dwbooster.com/documentation#javascript-variables
|
6 |
+
*/
|
7 |
+
|
8 |
+
class SiteOrigin_CFF_Variable_Shortcode extends SiteOrigin_Widget
|
9 |
+
{
|
10 |
+
function __construct()
|
11 |
+
{
|
12 |
+
parent::__construct(
|
13 |
+
'siteorigin-cff-variable-shortcode',
|
14 |
+
__('Calculated Fields Form, Variable Shortcode', 'calculated-fields-form'),
|
15 |
+
array(
|
16 |
+
'description' => __('Shortcode to generate a javascript variable from the url parameters (GET or POST), session variables, cookies, or define it directly', 'calculated-fields-form'),
|
17 |
+
'panels_groups' => array('calculated-fields-form'),
|
18 |
+
'help' => 'https://cff.dwbooster.com/documentation#javascript-variables',
|
19 |
+
),
|
20 |
+
array(),
|
21 |
+
array(
|
22 |
+
'name' => array(
|
23 |
+
'type' => 'text',
|
24 |
+
'label' => __( 'Variable name', 'calculated-fields-form' ),
|
25 |
+
'default' => '',
|
26 |
+
),
|
27 |
+
'from' => array(
|
28 |
+
'type' => 'select',
|
29 |
+
'label' => __('Generate variable from', 'calculated-fields-form' ),
|
30 |
+
'default' => '',
|
31 |
+
'options' => array(
|
32 |
+
'' => __( 'Any source', 'calculated-fields-form' ),
|
33 |
+
'from="get"' => __( 'GET parameter', 'calculated-fields-form' ),
|
34 |
+
'from="post"' => __( 'POST parameter', 'calculated-fields-form' ),
|
35 |
+
'from="session"' => __( 'Session variable', 'calculated-fields-form' ),
|
36 |
+
'from="cookie"' => __( 'Cookie', 'calculated-fields-form' ),
|
37 |
+
)
|
38 |
+
),
|
39 |
+
'default_value' => array(
|
40 |
+
'type' => 'text',
|
41 |
+
'label' => __( 'Default value (used when variables are generated from a source)', 'calculated-fields-form' ),
|
42 |
+
'default' => '',
|
43 |
+
),
|
44 |
+
'value' => array(
|
45 |
+
'type' => 'text',
|
46 |
+
'label' => __( 'Value (value of the variable when it is generated directly)', 'calculated-fields-form' ),
|
47 |
+
'default' => '',
|
48 |
+
),
|
49 |
+
),
|
50 |
+
plugin_dir_path(__FILE__)
|
51 |
+
);
|
52 |
+
} // End __construct
|
53 |
+
|
54 |
+
function get_template_name($instance)
|
55 |
+
{
|
56 |
+
return 'siteorigin-cff-variable-shortcode';
|
57 |
+
} // End get_template_name
|
58 |
+
|
59 |
+
function get_style_name($instance)
|
60 |
+
{
|
61 |
+
return '';
|
62 |
+
} // End get_style_name
|
63 |
+
|
64 |
+
} // End Class SiteOrigin_CFF_Variable_Shortcode
|
65 |
+
|
66 |
+
// Registering the widget
|
67 |
+
siteorigin_widget_register('siteorigin-cff-variable-shortcode', __FILE__, 'SiteOrigin_CFF_Variable_Shortcode');
|
pagebuilders/siteorigin/siteorigin-cpcff-variable/tpl/siteorigin-cff-variable-shortcode.php
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$name = trim($instance['name']);
|
3 |
+
$from = trim($instance['from']);
|
4 |
+
$default_value = trim($instance['default_value']);
|
5 |
+
$value = trim($instance['value']);
|
6 |
+
$shortcode = '';
|
7 |
+
if(!empty($name))
|
8 |
+
{
|
9 |
+
$shortcode .= '[CP_CALCULATED_FIELDS_VAR name="'.esc_attr($name).'"';
|
10 |
+
if(!empty($from)) $shortcode .= ' '.$from;
|
11 |
+
if(!empty($default_value)) $shortcode .= ' default_value="'.esc_attr($default_value).'"';
|
12 |
+
if(!empty($value)) $shortcode .= ' value="'.esc_attr($value).'"';
|
13 |
+
$shortcode .= ']';
|
14 |
+
}
|
15 |
+
print $shortcode;
|
pagebuilders/siteorigin/siteorigin-cpcff/assets/banner.svg
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z" fill="#3391C9" /><path d="M0 0h24v24H0z" fill="none"/></svg>
|
pagebuilders/siteorigin/siteorigin-cpcff/siteorigin-cpcff.php
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/*
|
3 |
+
Widget Name: Calculated Fields Form Shortcode
|
4 |
+
Description: Insert a form on page.
|
5 |
+
Documentation: https://cff.dwbooster.com/documentation#insertion-page
|
6 |
+
*/
|
7 |
+
|
8 |
+
class SiteOrigin_CFF_Shortcode extends SiteOrigin_Widget
|
9 |
+
{
|
10 |
+
function __construct()
|
11 |
+
{
|
12 |
+
global $wpdb;
|
13 |
+
$options = array();
|
14 |
+
$default = '';
|
15 |
+
$forms = $wpdb->get_results( "SELECT id, form_name FROM ".$wpdb->prefix.CP_CALCULATEDFIELDSF_FORMS_TABLE. " ORDER BY id ASC" );
|
16 |
+
foreach($forms as $form)
|
17 |
+
{
|
18 |
+
if(empty($default)) $default = $form->id;
|
19 |
+
$options[$form->id] = '('.$form->id.') '.$form->form_name;
|
20 |
+
}
|
21 |
+
|
22 |
+
parent::__construct(
|
23 |
+
'siteorigin-cff-shortcode',
|
24 |
+
__('Calculated Fields Form Shortcode', 'calculated-fields-form'),
|
25 |
+
array(
|
26 |
+
'description' => __('Includes the shortcode for inserting a form', 'calculated-fields-form'),
|
27 |
+
'panels_groups' => array('calculated-fields-form'),
|
28 |
+
'help' => 'https://cff.dwbooster.com/documentation#insertion-page',
|
29 |
+
),
|
30 |
+
array(),
|
31 |
+
array(
|
32 |
+
'form' => array(
|
33 |
+
'type' => 'select',
|
34 |
+
'label' => __( 'Form to include', 'calculated-fields-form' ),
|
35 |
+
'default' => $default,
|
36 |
+
'options' => $options
|
37 |
+
),
|
38 |
+
'class_name' => array(
|
39 |
+
'type' => 'text',
|
40 |
+
'label' => __('Enter a class name to be assigned to the form (optional)', 'calculated-fields-form')
|
41 |
+
),
|
42 |
+
'attrs' => array(
|
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';
|
54 |
+
} // End get_template_name
|
55 |
+
|
56 |
+
function get_style_name($instance)
|
57 |
+
{
|
58 |
+
return '';
|
59 |
+
} // End get_style_name
|
60 |
+
|
61 |
+
} // End Class SiteOrigin_CFF_Shortcode
|
62 |
+
|
63 |
+
// Registering the widget
|
64 |
+
siteorigin_widget_register('siteorigin-cff-shortcode', __FILE__, 'SiteOrigin_CFF_Shortcode');
|
pagebuilders/siteorigin/siteorigin-cpcff/tpl/siteorigin-cff-shortcode.php
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$form = trim($instance['form']);
|
3 |
+
$class_name = trim($instance['class_name']);
|
4 |
+
$attrs = trim($instance['attrs']);
|
5 |
+
$shortcode = '';
|
6 |
+
if(@intval($form))
|
7 |
+
{
|
8 |
+
$shortcode .= '[CP_CALCULATED_FIELDS id="'.esc_attr($form).'"';
|
9 |
+
if(!empty($class_name)) $shortcode .= ' class="'.esc_attr($class_name).'"';
|
10 |
+
if(!empty($attrs)) $shortcode .= ' '.$attrs;
|
11 |
+
$shortcode .= ']';
|
12 |
+
}
|
13 |
+
print $shortcode;
|