PluginProbe
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder / 4.3.6
Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder v4.3.6
6.2.13 6.2.12 6.2.10 6.2.11 6.2.9 6.2.8 6.2.7 6.2.6 6.2.5 6.2.4 6.2.3 6.2.2 3.6.22 3.6.31 3.6.40 3.6.41 3.6.42 3.6.50 3.6.51 3.6.60 3.6.61 3.6.62 3.6.64 3.6.65 3.6.66 All 195 releases
fluentform / app / Modules / Activator.php

Activator.php in Fluent Forms – Customizable Contact Forms, Survey, Quiz, & Conversational Form Builder 4.3.6, at app/Modules/Activator.php

209 lines 17.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentForm\App\Modules;
4
5 use FluentForm\App\Databases\Migrations\FormLogs;
6 use FluentForm\App\Databases\Migrations\FormSubmissionDetails;
7 use FluentForm\App\Modules\Acl\Acl;
8 use FluentForm\App\Databases\DatabaseMigrator;
9 use FluentForm\App\Modules\Form\Predefined;
10
11 class Activator
12 {
13 /**
14 * This method will be called on plugin activation
15 * @return void
16 */
17 public function handleActivation($network_wide)
18 {
19 global $wpdb;
20 if ($network_wide) {
21 // Retrieve all site IDs from this network (WordPress >= 4.6 provides easy to use functions for that).
22 if (function_exists('get_sites') && function_exists('get_current_network_id')) {
23 $site_ids = get_sites(array('fields' => 'ids', 'network_id' => get_current_network_id()));
24 } else {
25 $site_ids = $wpdb->get_col("SELECT blog_id FROM $wpdb->blogs WHERE site_id = $wpdb->siteid;");
26 }
27 // Install the plugin for all these sites.
28 foreach ($site_ids as $site_id) {
29 switch_to_blog($site_id);
30 $this->migrate();
31 restore_current_blog();
32 }
33 } else {
34 $this->migrate();
35 $this->maybeMigrateDefaultForms();
36 }
37
38 self::setCronSchedule();
39 }
40
41 public function migrate()
42 {
43 // We are going to migrate all the database tables here.
44 DatabaseMigrator::run();
45 // Assign fluentform permission set.
46 Acl::setPermissions();
47 $this->setDefaultGlobalSettings();
48 $this->setCurrentVersion();
49 $this->maybeMigrateDB();
50 }
51
52 public function maybeMigrateDB()
53 {
54 // First we have to check if global modules is set or not
55 $this->migrateGlobalAddOns();
56
57 if (!get_option('fluentform_entry_details_migrated')) {
58 FormSubmissionDetails::migrate();
59 }
60
61 if (!get_option('fluentform_db_fluentform_logs_added')) {
62 FormLogs::migrate();
63 }
64 }
65
66 public function migrateGlobalAddOns()
67 {
68 $globalModules = get_option('fluentform_global_modules_status');
69 // Modules already set
70 if (is_array($globalModules)) {
71 return;
72 }
73
74 $possibleGloablModules = [
75 'mailchimp' => '_fluentform_mailchimp_details',
76 'activecampaign' => '_fluentform_activecampaign_settings',
77 'campaign_monitor' => '_fluentform_campaignmonitor_settings',
78 'constatantcontact' => '_fluentform_constantcontact_settings',
79 'getresponse' => '_fluentform_getresponse_settings',
80 'icontact' => '_fluentform_icontact_settings'
81 ];
82
83 $possibleMetaModules = [
84 'webhook' => 'fluentform_webhook_feed',
85 'zapier' => 'fluentform_zapier_feed',
86 'slack' => 'slack'
87 ];
88
89 $moduleStatuses = [];
90 foreach ($possibleGloablModules as $moduleName => $settingsKey) {
91 if (get_option($settingsKey)) {
92 $moduleStatuses[$moduleName] = 'yes';
93 } else {
94 $moduleStatuses[$moduleName] = 'no';
95 }
96 }
97
98 global $wpdb;
99
100 foreach ($possibleMetaModules as $moduleName => $metaName) {
101 $row = $wpdb->get_row("SELECT * FROM `{$wpdb->prefix}fluentform_form_meta` WHERE `meta_key` = '{$metaName}' LIMIT 1");
102
103 if ($row) {
104 $moduleStatuses[$moduleName] = 'yes';
105 } else {
106 $moduleStatuses[$moduleName] = 'no';
107 }
108 }
109
110 update_option('fluentform_global_modules_status', $moduleStatuses, 'no');
111 }
112
113 private function setDefaultGlobalSettings()
114 {
115 if (!get_option('_fluentform_global_form_settings')) {
116 update_option('__fluentform_global_form_settings', array(
117 'layout' => array(
118 'labelPlacement' => 'top',
119 'asteriskPlacement' => 'asterisk-right',
120 'helpMessagePlacement' => 'with_label',
121 'errorMessagePlacement' => 'inline',
122 'cssClassName' => ''
123 )
124 ), 'no');
125 }
126 }
127
128 private function setCurrentVersion()
129 {
130 update_option('_fluentform_installed_version', FLUENTFORM_VERSION, 'no');
131 }
132
133 public static function setCronSchedule()
134 {
135 add_filter('cron_schedules', function ($schedules) {
136 $schedules['ff_every_five_minutes'] = array(
137 'interval' => 300,
138 'display' => esc_html__('Every 5 Minutes (FluentForm)', 'fluentform'),
139 );
140 return $schedules;
141 }, 10, 1);
142
143 $hookName = 'fluentform_do_scheduled_tasks';
144 if (!wp_next_scheduled($hookName)) {
145 wp_schedule_event(time(), 'ff_every_five_minutes', $hookName);
146 }
147
148 $emailReportHookName = 'fluentform_do_email_report_scheduled_tasks';
149 if (!wp_next_scheduled($emailReportHookName)) {
150 wp_schedule_event(time(), 'daily', $emailReportHookName);
151 }
152 }
153
154 public static function maybeMigrateDefaultForms()
155 {
156 global $wpdb;
157 $formsTable = $wpdb->prefix . 'fluentform_forms';
158 $firstForm = $wpdb->get_row('SELECT * FROM ' . $formsTable . ' LIMIT 1');
159
160 if (!$firstForm) {
161 $forms = [
162 '[{"id":"9","title":"Contact Form Demo","status":"published","appearance_settings":null,"form_fields":{"fields":[{"index":0,"element":"input_name","attributes":{"name":"names","data-type":"name-element"},"settings":{"container_class":"","admin_field_label":"Name","conditional_logics":[]},"fields":{"first_name":{"element":"input_text","attributes":{"type":"text","name":"first_name","value":"","id":"","class":"","placeholder":"First Name"},"settings":{"container_class":"","label":"First Name","help_message":"","visible":true,"validation_rules":{"required":{"value":false,"message":"This field is required"}},"conditional_logics":[]},"editor_options":{"template":"inputText"}},"middle_name":{"element":"input_text","attributes":{"type":"text","name":"middle_name","value":"","id":"","class":"","placeholder":"","required":false},"settings":{"container_class":"","label":"Middle Name","help_message":"","error_message":"","visible":false,"validation_rules":{"required":{"value":false,"message":"This field is required"}},"conditional_logics":[]},"editor_options":{"template":"inputText"}},"last_name":{"element":"input_text","attributes":{"type":"text","name":"last_name","value":"","id":"","class":"","placeholder":"Last Name","required":false},"settings":{"container_class":"","label":"Last Name","help_message":"","error_message":"","visible":true,"validation_rules":{"required":{"value":false,"message":"This field is required"}},"conditional_logics":[]},"editor_options":{"template":"inputText"}}},"editor_options":{"title":"Name Fields","element":"name-fields","icon_class":"ff-edit-name","template":"nameFields"},"uniqElKey":"el_1570866006692"},{"index":1,"element":"input_email","attributes":{"type":"email","name":"email","value":"","id":"","class":"","placeholder":"Email Address"},"settings":{"container_class":"","label":"Email","label_placement":"","help_message":"","admin_field_label":"","validation_rules":{"required":{"value":true,"message":"This field is required"},"email":{"value":true,"message":"This field must contain a valid email"}},"conditional_logics":[]},"editor_options":{"title":"Email Address","icon_class":"ff-edit-email","template":"inputText"},"uniqElKey":"el_1570866012914"},{"index":2,"element":"input_text","attributes":{"type":"text","name":"subject","value":"","class":"","placeholder":"Subject"},"settings":{"container_class":"","label":"Subject","label_placement":"","admin_field_label":"Subject","help_message":"","validation_rules":{"required":{"value":false,"message":"This field is required"}},"conditional_logics":{"type":"any","status":false,"conditions":[{"field":"","value":"","operator":""}]}},"editor_options":{"title":"Simple Text","icon_class":"ff-edit-text","template":"inputText"},"uniqElKey":"el_1570878958648"},{"index":3,"element":"textarea","attributes":{"name":"message","value":"","id":"","class":"","placeholder":"Your Message","rows":4,"cols":2},"settings":{"container_class":"","label":"Your Message","admin_field_label":"","label_placement":"","help_message":"","validation_rules":{"required":{"value":true,"message":"This field is required"}},"conditional_logics":{"type":"any","status":false,"conditions":[{"field":"","value":"","operator":""}]}},"editor_options":{"title":"Text Area","icon_class":"ff-edit-textarea","template":"inputTextarea"},"uniqElKey":"el_1570879001207"}],"submitButton":{"uniqElKey":"el_1524065200616","element":"button","attributes":{"type":"submit","class":""},"settings":{"align":"left","button_style":"default","container_class":"","help_message":"","background_color":"#409EFF","button_size":"md","color":"#ffffff","button_ui":{"type":"default","text":"Submit Form","img_url":""}},"editor_options":{"title":"Submit Button"}}},"has_payment":"0","type":"","conditions":null,"created_by":"1","created_at":"2021-06-08 04:56:28","updated_at":"2021-06-08 04:56:28","metas":[{"meta_key": "template_name","value": "basic_contact_form"},{"meta_key":"formSettings","value":"{\"confirmation\":{\"redirectTo\":\"samePage\",\"messageToShow\":\"Thank you for your message. We will get in touch with you shortly\",\"customPage\":null,\"samePageFormBehavior\":\"hide_form\",\"customUrl\":null},\"restrictions\":{\"limitNumberOfEntries\":{\"enabled\":false,\"numberOfEntries\":null,\"period\":\"total\",\"limitReachedMsg\":\"Maximum number of entries exceeded.\"},\"scheduleForm\":{\"enabled\":false,\"start\":null,\"end\":null,\"selectedDays\":[\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\",\"Sunday\"],\"pendingMsg\":\"Form submission is not started yet.\",\"expiredMsg\":\"Form submission is now closed.\"},\"requireLogin\":{\"enabled\":false,\"requireLoginMsg\":\"You must be logged in to submit the form.\"},\"denyEmptySubmission\":{\"enabled\":false,\"message\":\"Sorry, you cannot submit an empty form. Let\'s hear what you wanna say.\"}},\"layout\":{\"labelPlacement\":\"top\",\"helpMessagePlacement\":\"with_label\",\"errorMessagePlacement\":\"inline\",\"cssClassName\":\"\",\"asteriskPlacement\":\"asterisk-right\"},\"delete_entry_on_submission\":\"no\",\"appendSurveyResult\":{\"enabled\":false,\"showLabel\":false,\"showCount\":false}}"},{"meta_key":"advancedValidationSettings","value":"{\"status\":false,\"type\":\"all\",\"conditions\":[{\"field\":\"\",\"operator\":\"=\",\"value\":\"\"}],\"error_message\":\"\",\"validation_type\":\"fail_on_condition_met\"}"},{"meta_key":"double_optin_settings","value":"{\"status\":\"no\",\"confirmation_message\":\"Please check your email inbox to confirm this submission\",\"email_body_type\":\"global\",\"email_subject\":\"Please confirm your form submission\",\"email_body\":\"<h2>Please Confirm Your Submission<\/h2><p>&nbsp;<\/p><p style=\"text-align: center;\"><a style=\"color: #ffffff; background-color: #454545; font-size: 16px; border-radius: 5px; text-decoration: none; font-weight: normal; font-style: normal; padding: 0.8rem 1rem; border-color: #0072ff;\" href=\"#confirmation_url#\">Confirm Submission<\/a><\/p><p>&nbsp;<\/p><p>If you received this email by mistake, simply delete it. Your form submission won\'t proceed if you don\'t click the confirmation link above.<\/p>\",\"email_field\":\"\",\"skip_if_logged_in\":\"yes\",\"skip_if_fc_subscribed\":\"no\"}"}]}]',
163 '[{"id":"8","title":"Subscription Form","status":"published","appearance_settings":null,"form_fields":{"fields":[{"index":1,"element":"container","attributes":[],"settings":{"container_class":"","conditional_logics":{"type":"any","status":false,"conditions":[{"field":"","value":"","operator":""}]}},"columns":[{"fields":[{"index":1,"element":"input_email","attributes":{"type":"email","name":"email","value":"","id":"","class":"","placeholder":"Your Email Address"},"settings":{"container_class":"","label":"","label_placement":"","help_message":"","admin_field_label":"Email","validation_rules":{"required":{"value":true,"message":"This field is required"},"email":{"value":true,"message":"This field must contain a valid email"}},"conditional_logics":[],"is_unique":"no","unique_validation_message":"Email address need to be unique."},"editor_options":{"title":"Email Address","icon_class":"ff-edit-email","template":"inputText"},"uniqElKey":"el_16231279686950.8779857923682932"}]},{"fields":[{"index":15,"element":"custom_submit_button","attributes":{"class":"","type":"submit"},"settings":{"button_style":"","button_size":"md","align":"left","container_class":"","current_state":"normal_styles","background_color":"","color":"","hover_styles":{"backgroundColor":"#ffffff","borderColor":"#409EFF","color":"#409EFF","borderRadius":"","minWidth":"100%"},"normal_styles":{"backgroundColor":"#409EFF","borderColor":"#409EFF","color":"#ffffff","borderRadius":"","minWidth":"100%"},"button_ui":{"text":"Subscribe","type":"default","img_url":""},"conditional_logics":{"type":"any","status":false,"conditions":[{"field":"","value":"","operator":""}]}},"editor_options":{"title":"Custom Submit Button","icon_class":"dashicons dashicons-arrow-right-alt","template":"customButton"},"uniqElKey":"el_16231279798380.5947400167493171"}]}],"editor_options":{"title":"Two Column Container","icon_class":"ff-edit-column-2"},"uniqElKey":"el_16231279284710.40955091024524304"}],"submitButton":{"uniqElKey":"el_1524065200616","element":"button","attributes":{"type":"submit","class":""},"settings":{"align":"left","button_style":"default","container_class":"","help_message":"","background_color":"#409EFF","button_size":"md","color":"#ffffff","button_ui":{"type":"default","text":"Subscribe","img_url":""}},"editor_options":{"title":"Submit Button"}}},"has_payment":"0","type":"form","conditions":null,"created_by":"1","created_at":"2021-06-08 04:51:36","updated_at":"2021-06-08 04:54:02","metas":[{"meta_key": "template_name","value": "inline_subscription"},{"meta_key":"formSettings","value":"{\"confirmation\":{\"redirectTo\":\"samePage\",\"messageToShow\":\"Thank you for your message. We will get in touch with you shortly\",\"customPage\":null,\"samePageFormBehavior\":\"hide_form\",\"customUrl\":null},\"restrictions\":{\"limitNumberOfEntries\":{\"enabled\":false,\"numberOfEntries\":null,\"period\":\"total\",\"limitReachedMsg\":\"Maximum number of entries exceeded.\"},\"scheduleForm\":{\"enabled\":false,\"start\":null,\"end\":null,\"pendingMsg\":\"Form submission is not started yet.\",\"expiredMsg\":\"Form submission is now closed.\"},\"requireLogin\":{\"enabled\":false,\"requireLoginMsg\":\"You must be logged in to submit the form.\"},\"denyEmptySubmission\":{\"enabled\":false,\"message\":\"Sorry, you cannot submit an empty form. Let\'s hear what you wanna say.\"}},\"layout\":{\"labelPlacement\":\"top\",\"helpMessagePlacement\":\"with_label\",\"errorMessagePlacement\":\"inline\",\"asteriskPlacement\":\"asterisk-right\"}}"},{"meta_key":"notifications","value":"{\"name\":\"Admin Notification Email\",\"sendTo\":{\"type\":\"email\",\"email\":\"{wp.admin_email}\",\"field\":\"email\",\"routing\":[{\"email\":null,\"field\":null,\"operator\":\"=\",\"value\":null}]},\"fromName\":\"\",\"fromEmail\":\"\",\"replyTo\":\"\",\"bcc\":\"\",\"subject\":\"[{inputs.names}] New Form Submission\",\"message\":\"<p>{all_data}<\\\/p>\\n<p>This form submitted at: {embed_post.permalink}<\\\/p>\",\"conditionals\":{\"status\":false,\"type\":\"all\",\"conditions\":[{\"field\":null,\"operator\":\"=\",\"value\":null}]},\"enabled\":false,\"email_template\":\"\"}"},{"meta_key":"step_data_persistency_status","value":"no"},{"meta_key":"_primary_email_field","value":"email"}]}]'
164 ];
165
166 foreach ($forms as $index => $formJson) {
167 $structure = json_decode($formJson, true)[0];
168
169 $insertData = [
170 'title' => $structure['title'],
171 'type' => $structure['type'],
172 'status' => 'published',
173 'created_by' => get_current_user_id(),
174 'created_at' => current_time('mysql'),
175 'updated_at' => current_time('mysql'),
176 'form_fields' => json_encode($structure['form_fields'])
177 ];
178
179 $wpdb->insert($formsTable, $insertData, [
180 '%s',
181 '%s',
182 '%s',
183 '%d',
184 '%s',
185 '%s',
186 '%s'
187 ]);
188
189
190 $formId = $wpdb->insert_id;
191
192 foreach ($structure['metas'] as $meta) {
193 $meta['value'] = trim(preg_replace('/\s+/', ' ', $meta['value']));
194
195 $wpdb->insert($wpdb->prefix . 'fluentform_form_meta', array(
196 'form_id' => $formId,
197 'meta_key' => $meta['meta_key'],
198 'value' => $meta['value']
199 ), [
200 '%d',
201 '%s',
202 '%s'
203 ]);
204 }
205 }
206 }
207 }
208 }
209