PluginProbe ʕ •ᴥ•ʔ
Brevo – Email, SMS, Web Push, Chat, and more. / 3.1.51
Brevo – Email, SMS, Web Push, Chat, and more. v3.1.51
2.9.13 2.9.14 2.9.15 2.9.16 2.9.17 2.9.18 2.9.4 2.9.5 2.9.6 2.9.7 2.9.8 2.9.9 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.9 3.1.0 3.1.1 3.1.10 3.1.11 3.1.12 3.1.13 3.1.14 3.1.15 3.1.16 3.1.2 3.1.20 3.1.21 3.1.22 3.1.23 3.1.24 3.1.25 3.1.26 3.1.27 3.1.28 3.1.29 3.1.3 3.1.30 3.1.31 3.1.32 3.1.33 3.1.34 3.1.35 3.1.36 3.1.37 3.1.38 3.1.39 3.1.4 3.1.40 3.1.41 3.1.42 3.1.43 3.1.44 3.1.45 3.1.46 3.1.47 3.1.48 3.1.49 3.1.5 3.1.50 3.1.51 3.1.52 3.1.53 3.1.54 3.1.55 3.1.56 3.1.57 3.1.58 3.1.59 3.1.6 3.1.60 3.1.61 3.1.62 3.1.63 3.1.64 3.1.65 3.1.66 3.1.67 3.1.68 3.1.69 3.1.7 3.1.70 3.1.71 3.1.72 3.1.73 3.1.74 3.1.75 3.1.76 3.1.77 3.1.78 3.1.79 3.1.8 3.1.80 3.1.81 3.1.82 3.1.83 3.1.84 3.1.85 3.1.86 3.1.87 3.1.88 3.1.89 3.1.9 3.1.90 3.1.91 3.1.92 3.1.93 3.1.94 3.1.95 3.1.96 3.1.97 3.1.98 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.2.9 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 trunk 1.0 1.5 2.0.8 2.9.10 2.9.11 2.9.12
mailin / model / model-forms.php
mailin / model Last commit date
index.php 11 years ago model-contacts.php 5 years ago model-forms.php 3 years ago model-lang.php 5 years ago model-users.php 4 years ago
model-forms.php
439 lines
1 <?php
2 /**
3 * Model class <i>SIB_Forms</i> represents forms
4 *
5 * @package SIB_Forms
6 */
7
8 if ( ! class_exists( 'SIB_Forms' ) ) {
9 /**
10 * Class SIB_Forms
11 *
12 * @package SIB_Forms
13 */
14 class SIB_Forms {
15
16 /**
17 * Tab table name
18 */
19 const TABLE_NAME = 'sib_model_forms';
20 const DEFAULT_FORM_HTML_PATH = '../form/default-form.html';
21 const DEFAULT_FORM_CSS_PATH = '../form/css/default-form.css';
22 const DEFAULT_FORM_MESSAGE_CSS_PATH = '../form/css/default-form-message.css';
23
24 /** Create Table */
25 public static function createTable() {
26 global $wpdb;
27 // create list table.
28 $creation_query =
29 'CREATE TABLE IF NOT EXISTS ' . $wpdb->prefix . self::TABLE_NAME . ' (
30 `id` int(20) NOT NULL AUTO_INCREMENT,
31 `title` varchar(120) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
32 `html` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci,
33 `css` longtext,
34 `dependTheme` int(1) NOT NULL DEFAULT 1,
35 `listID` longtext,
36 `templateID` int(20) NOT NULL DEFAULT -1,
37 `confirmID` int(20) NOT NULL DEFAULT -1,
38 `isDopt` int(1) NOT NULL DEFAULT 0,
39 `isOpt` int(1) NOT NULL DEFAULT 0,
40 `redirectInEmail` varchar(255),
41 `redirectInForm` varchar(255),
42 `successMsg` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
43 `errorMsg` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
44 `existMsg` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
45 `invalidMsg` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
46 `requiredMsg` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
47 `attributes` TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci,
48 `date` DATE NOT NULL,
49 `isDefault` int(1) NOT NULL DEFAULT 0,
50 `gCaptcha` int(1) NOT NULL DEFAULT 0,
51 `gCaptcha_secret` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
52 `gCaptcha_site` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
53 `termAccept` int(1) NOT NULL DEFAULT 0,
54 `termsURL` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
55 PRIMARY KEY (`id`)
56 );';
57 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
58 $wpdb->query($creation_query);
59 // create default form.
60 $rows = $wpdb->get_results('SELECT * FROM '. $wpdb->prefix . self::TABLE_NAME );
61 if (count( $rows ) == 0 )
62 {
63 self::createDefaultForm();
64 }
65 }
66
67 /**
68 * Remove table
69 */
70 public static function removeTable() {
71 global $wpdb;
72 $query = 'DROP TABLE IF EXISTS ' . $wpdb->prefix . self::TABLE_NAME . ';';
73 $wpdb->query( $query ); // db call ok; no-cache ok.
74 }
75
76 /**
77 * Add columns for old versions
78 */
79 public static function alterTable() {
80 global $wpdb;
81 // add columns -gCaptcha, gCaptcha_secret.
82 $table_name = $wpdb->prefix . self::TABLE_NAME;
83
84 // check if gCaptcha fields exist
85 $gCaptcha = 'gCaptcha';
86 $result = $wpdb->query( $wpdb->prepare( "SHOW COLUMNS FROM `$table_name` LIKE %s ", $gCaptcha ) ); // db call ok; no-cache ok.
87
88 if ( empty( $result ) ) {
89 $alter_query = 'ALTER TABLE ' . $table_name . '
90 ADD COLUMN gCaptcha int(1) not NULL DEFAULT 0,
91 ADD COLUMN gCaptcha_secret varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
92 ADD COLUMN gCaptcha_site varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci';
93 $ret = $wpdb->query( $alter_query );
94 }
95
96 // add columns -termAccept, termsURL : version 2.9.0
97 $check_query = 'SHOW COLUMNS FROM `' . $table_name . "` LIKE 'termAccept';";
98 $result = $wpdb->query( $check_query );
99 if ( empty( $result ) ) {
100 $alter_query = 'ALTER TABLE ' . $table_name . '
101 ADD COLUMN termAccept int(1) not NULL DEFAULT 1,
102 ADD COLUMN termsURL varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci';
103 $ret = $wpdb->query( $alter_query );
104 }
105 // add columns - confirmID : version 2.9.0
106 $check_query = 'SHOW COLUMNS FROM `' . $table_name . "` LIKE 'confirmID';";
107 $result = $wpdb->query( $check_query );
108 if ( empty( $result ) ) {
109 $alter_query = 'ALTER TABLE ' . $table_name . '
110 ADD COLUMN confirmID int(20) not NULL DEFAULT -1';
111 $ret = $wpdb->query( $alter_query );
112 }
113 // add columns - requiredMsg : version 2.9.3
114 $check_query = 'SHOW COLUMNS FROM `' . $table_name . "` LIKE 'requiredMsg';";
115 $result = $wpdb->query( $check_query );
116 if ( empty( $result ) ) {
117 $alter_query = 'ALTER TABLE ' . $table_name . '
118 ADD COLUMN requiredMsg varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci';
119 $ret = $wpdb->query( $alter_query );
120 }
121 }
122
123 /**
124 * Get form data
125 *
126 * @param string $frmID - form ID.
127 * @return array|null|object|void
128 */
129 public static function getForm( $frmID = 'new' ) {
130 global $wpdb;
131 if ( 'new' == $frmID ) {
132 // default form.
133 $formData = self::getDefaultForm();
134 $list = maybe_serialize( array( SIB_API_Manager::get_default_list_id() ) );
135 $results = array(
136 'title' => '',
137 'html' => $formData['html'],// phpcs:ignore
138 'css' => $formData['css'],
139 'listID' => $list,
140 'dependTheme' => '1',
141 'templateID' => '-1',
142 'confirmID' => '-1',
143 'isOpt' => '0',
144 'isDopt' => '0',
145 'redirectInEmail' => '',
146 'redirectInForm' => '',
147 'date' => date( 'Y-m-d' ),
148 'successMsg' => $formData['successMsg'],
149 'errorMsg' => $formData['errorMsg'],
150 'existMsg' => $formData['existMsg'],
151 'invalidMsg' => $formData['invalidMsg'],
152 'requiredMsg' => $formData['requiredMsg'],
153 'attributes' => 'email,NAME',
154 );
155 } else {
156 $query = $wpdb->prepare('SELECT * from ' . $wpdb->prefix . self::TABLE_NAME . ' where id = %d',array(esc_sql($frmID)));
157 $results = $wpdb->get_row( $query, ARRAY_A ); // db call ok; no-cache ok.
158 }
159
160 if (str_contains($results['html'], 'class="sib-sms-field"')) {
161 $sms_manager = new SIB_SMS_Code();
162 $country_list = $sms_manager->get_sms_code_list();
163 $stripStartPoint = strpos($results['html'], '"sib-sms"');
164 $startPoint = $stripStartPoint + 18;
165 $endPoint = $startPoint + 1;
166 $stripData = substr($results['html'], $startPoint, $endPoint);
167 $countryCodeString = explode('"', $stripData);
168 $countryCode = $countryCodeString[0];
169 foreach ($country_list as $item => $value) {
170 $checkCountryCode = $value['code'];
171 if ($checkCountryCode == $countryCode) {
172 $flg_url = plugins_url('mailin/img/flags/') . strtolower($item) . '.png';
173 $results['html'] = str_replace(
174 'class="sib-cflags"',
175 'class="sib-cflags" id="' . $frmID . '" style="background-image: url(' . $flg_url . ');"',
176 $results['html']
177 );
178 }
179 }
180 }
181
182 if ( is_array( $results ) && count( $results ) > 0 ) {
183 $listIDs = maybe_unserialize( $results['listID'] );
184 $results['listID'] = $listIDs;
185 return $results;
186 }
187 return array();
188 }
189
190 /**
191 * Get all forms
192 */
193 public static function getForms() {
194 global $wpdb;
195
196 $query = 'select * from ' . $wpdb->prefix . self::TABLE_NAME . ';';
197 $results = $wpdb->get_results( $query, ARRAY_A ); // db call ok; no-cache ok.
198
199 if ( is_array( $results ) && count( $results ) > 0 ) {
200 // add list names field to display form table.
201 foreach ( $results as $key => $form ) {
202 if ( SIB_Forms_Lang::check_form_trans( $form['id'] ) == true ) {
203 unset( $results[ $key ] );
204 continue;
205 }
206 $listIDs = maybe_unserialize( $form['listID'] );
207 $listIDs = !empty($listIDs) ? $listIDs : array();
208 // get names form id array.
209 $lists = SIB_API_Manager::get_lists(); // pair of id and name.
210
211 $listNames = array();
212 foreach ( $lists as $list ) {
213 if ( in_array( $list['id'], $listIDs ) ) {
214 $listNames[] = $list['name'];
215 }
216 }
217 $results[ $key ]['listName'] = implode( ',', $listNames );
218 $results[ $key ]['listID'] = $listIDs;
219 }
220 return $results;
221 }
222 return array();
223
224 }
225
226 /**
227 * Add new form
228 *
229 * @param array $formData - form data.
230 * @return null|string
231 */
232 public static function addForm( $formData ) {
233 global $wpdb;
234
235 $current_date = date( 'Y-m-d' );
236
237 global $wpdb;
238 $query = 'INSERT INTO ' . $wpdb->prefix . self::TABLE_NAME.' (title,html,css,dependTheme,listID,templateID,confirmID,isOpt,isDopt,redirectInEmail,redirectInForm,successMsg,errorMsg,existMsg,invalidMsg,requiredMsg,attributes,date,gCaptcha,gCaptcha_secret,gCaptcha_site,termAccept,termsURL) VALUES ';
239 $query .= ' (%s, %s, %s, %d, %s, %d, %d, %d, %d, %s, %s, %s, %s, %s, %s, %s, %s, %s, %d, %s, %s, %d, %s)';
240
241 $query = $wpdb->prepare($query,array($formData['title'],$formData['html'],$formData['css'],$formData['dependTheme'],$formData['listID'],
242 $formData['templateID'],$formData['confirmID'],$formData['isOpt'],$formData['isDopt'],$formData['redirectInEmail'],$formData['redirectInForm'],
243 $formData['successMsg'],$formData['errorMsg'],$formData['existMsg'],$formData['invalidMsg'],$formData['requiredMsg'],$formData['attributes'],$current_date,$formData['gcaptcha'],$formData['gcaptcha_secret'] ,$formData['gcaptcha_site'],$formData['termAccept'],$formData['termsURL']));
244
245 $wpdb->query( $query ); // db call ok; no-cache ok.
246 $index = $wpdb->get_var( 'SELECT LAST_INSERT_ID();' ); // db call ok; no-cache ok.
247 return $index;
248 }
249
250 /**
251 * Update form
252 *
253 * @param int $formID - form ID.
254 * @param array $formData - form data.
255 * @return bool
256 */
257 public static function updateForm( $formID, $formData ) {
258 global $wpdb;
259
260 $current_date = date( 'Y-m-d' );
261
262 global $wpdb;
263
264 $query = 'UPDATE ' . $wpdb->prefix . self::TABLE_NAME ;
265 $query .= " set title = %s, html = %s, css = %s, dependTheme = %d, listID = %s, templateID = %d, confirmID = %d, isOpt = %d, isDopt = %d, redirectInEmail = %s, redirectInForm = %s, successMsg = %s, errorMsg = %s, existMsg = %s, invalidMsg = %s, requiredMsg = %s, attributes = %s, date = %s, gCaptcha = %d, gCaptcha_secret = %s, gCaptcha_site = %s, termAccept = %d, termsURL = %s";
266 $query .= ' where id= %d';
267
268 $query = $wpdb->prepare( $query ,array($formData['title'],$formData['html'],$formData['css'],$formData['dependTheme'],$formData['listID'],
269 $formData['templateID'],$formData['confirmID'],$formData['isOpt'],$formData['isDopt'],$formData['redirectInEmail'],$formData['redirectInForm'],
270 $formData['successMsg'],$formData['errorMsg'],$formData['existMsg'],$formData['invalidMsg'],$formData['requiredMsg'],$formData['attributes'],$current_date,$formData['gcaptcha'],$formData['gcaptcha_secret'] ,$formData['gcaptcha_site'],$formData['termAccept'],$formData['termsURL'], esc_sql($formID)));
271
272
273 $wpdb->query( $query ); // db call ok; no-cache ok.
274
275 return true;
276 }
277
278 /**
279 * Remove form
280 *
281 * @param int $id - target form id.
282 */
283 public static function deleteForm( $id ) {
284 global $wpdb;
285
286 $wpdb->delete(
287 $wpdb->prefix . self::TABLE_NAME,
288 array(
289 'id' => $id,
290 )
291 ); // db call ok; no-cache ok.
292 }
293
294 /** Clear forms data */
295 public static function removeAllForms() {
296 global $wpdb;
297 $wpdb->query( 'TRUNCATE TABLE ' . $wpdb->prefix . self::TABLE_NAME ); // db call ok; no-cache ok.
298 return true;
299 }
300
301 /** Create default form */
302 public static function createDefaultForm() {
303 $formData = self::getDefaultForm();
304 // phpcs:ignore
305 $html = $formData['html'];
306 $css = $formData['css'];
307 $list = maybe_serialize( array( SIB_API_Manager::get_default_list_id() ) );
308 $current_date = date( 'Y-m-d' );
309 $attributes = 'email,NAME';
310 global $wpdb;
311 $query = 'INSERT INTO ' . $wpdb->prefix . self::TABLE_NAME . ' ';
312 $deafult_form_name = esc_attr( __( 'Default Form', 'mailin' ) );
313 $query .= '(title,html,css,listID,dependTheme,successMsg,errorMsg,existMsg,invalidMsg,requiredMsg,attributes,date,isDefault) ';
314 $query .= "VALUES ('{$deafult_form_name}','{$html}','{$css}','{$list}','1','{$formData['successMsg']}','{$formData['errorMsg']}','{$formData['existMsg']}','{$formData['invalidMsg']}','{$formData['requiredMsg']}','{$attributes}','{$current_date}','1')";
315 $wpdb->query( $query ); // db call ok; no-cache ok.
316 }
317
318 /** Get default form data */
319 public static function getDefaultForm() {
320
321 $html = wp_kses(self::get_default_form_html(), SIB_Manager::SIB_ATTRIBUTE);
322 $css = wp_kses(self::get_default_css_html(), SIB_Manager::SIB_ATTRIBUTE);
323
324 $result = array(
325 'html' => $html,
326 'css' => $css,
327 'successMsg' => esc_attr( __( 'Thank you, you have successfully registered !', 'mailin' ) ),
328 'errorMsg' => esc_attr( __( 'Something wrong occured', 'mailin' ) ),
329 'existMsg' => esc_attr( __( 'You have already registered', 'mailin' ) ),
330 'invalidMsg' => esc_attr( __( 'Your email address is invalid', 'mailin' ) ),
331 'requiredMsg' => esc_attr(__('Please fill out this field', 'mailin'))
332 );
333 return $result;
334 }
335
336 /** Get Default css */
337 public static function getDefaultMessageCss() {
338 $css = file_get_contents(__DIR__ . '/' . self::DEFAULT_FORM_MESSAGE_CSS_PATH) ?: '';
339 return wp_kses($css, SIB_Manager::SIB_ATTRIBUTE);
340 }
341
342 /**
343 * Get form data of old version
344 * We suppose that the clients have got own setting values for form.
345 * If the client have default setting only then it will be return error.
346 * This function will be removed after next version
347 */
348 public static function get_old_form() {
349 // create form from old version.
350 $form_settings = get_option( 'sib_subscription_option' );
351 $html = $form_settings['sib_form_html'];
352 $avail_atts = $form_settings['available_attributes'];
353
354 $signup_settings = get_option( 'sib_signup_option' );
355 $is_confirm_email = 'yes' == $signup_settings['is_confirm_email'] ? 1 : 0;
356 $is_double_optin = 'yes' == $signup_settings['is_double_optin'] ? 1 : 0;
357 $redirect_url = $signup_settings['redirect_url'];
358 $redirect_url_click = $signup_settings['redirect_url_click'];
359 $template_id = 1 == $is_confirm_email ? $signup_settings['template_id'] : $signup_settings['doubleoptin_template_id'];
360
361 $confirmMsg = get_option( 'sib_confirm_option' );
362
363 $homeSetting = get_option( 'sib_home_option' );
364 $sib_list = maybe_serialize( array( (string) $homeSetting['list_id'] ) );
365
366 $formData = array(
367 'title' => 'Old Form',
368 'html' => $html,
369 'css' => '',
370 'dependTheme' => '1',
371 'listID' => $sib_list,
372 'templateID' => $template_id,
373 'isOpt' => $is_confirm_email,
374 'isDopt' => $is_double_optin,
375 'redirectInEmail' => $redirect_url,
376 'redirectInForm' => $redirect_url_click,
377 'successMsg' => $confirmMsg['alert_success_message'],
378 'errorMsg' => $confirmMsg['alert_error_message'],
379 'existMsg' => $confirmMsg['alert_exist_subscriber'],
380 'invalidMsg' => $confirmMsg['alert_invalid_email'],
381 'attributes' => 'email,' . implode( ',', $avail_atts ),
382 );
383
384 return $formData;
385 }
386
387 /**
388 * Add prefix to the table
389 */
390 public static function add_prefix() {
391 global $wpdb;
392 if (self::forms_table_exists()) {
393 $query = 'ALTER TABLE ' . self::TABLE_NAME . ' RENAME TO ' . $wpdb->prefix . self::TABLE_NAME . ';';
394 $wpdb->query( $query ); // db call ok; no-cache ok.
395 }
396 }
397
398 /**
399 * Change datatype of attribute column
400 */
401 public static function modify_datatype() {
402 global $wpdb;
403 if (self::forms_table_exists()) {
404 $tableStructure = $wpdb->get_results( "DESC " . $wpdb->prefix . self::TABLE_NAME );
405 foreach ($tableStructure as $key => $value)
406 {
407 if($value->Field == "attributes" && $value->Type == "varchar(255)")
408 $wpdb->query("ALTER TABLE ". $wpdb->prefix . self::TABLE_NAME." MODIFY ".$value->Field." TEXT DEFAULT NULL");
409 }
410 }
411 }
412
413 /**
414 * @return bool
415 */
416 public static function forms_table_exists()
417 {
418 global $wpdb;
419 return $wpdb->get_var( "SHOW TABLES LIKE '" . self::TABLE_NAME . "'" ) == self::TABLE_NAME;
420 }
421
422 /**
423 * @return string
424 */
425 public static function get_default_form_html()
426 {
427 return file_get_contents(__DIR__ . '/' . self::DEFAULT_FORM_HTML_PATH) ?: '';
428 }
429
430 /**
431 * @return string
432 */
433 public static function get_default_css_html()
434 {
435 return file_get_contents(__DIR__ . '/' . self::DEFAULT_FORM_CSS_PATH) ?: '';
436 }
437 }
438 }
439