PluginProbe ʕ •ᴥ•ʔ
Brevo – Email, SMS, Web Push, Chat, and more. / 3.1.39
Brevo – Email, SMS, Web Push, Chat, and more. v3.1.39
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 4 years ago model-lang.php 5 years ago model-users.php 4 years ago
model-forms.php
475 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
21 /** Create Table */
22 public static function createTable() {
23 global $wpdb;
24 // create list table.
25 $creation_query =
26 'CREATE TABLE IF NOT EXISTS ' . $wpdb->prefix . self::TABLE_NAME . ' (
27 `id` int(20) NOT NULL AUTO_INCREMENT,
28 `title` varchar(120) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
29 `html` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci,
30 `css` longtext,
31 `dependTheme` int(1) NOT NULL DEFAULT 1,
32 `listID` longtext,
33 `templateID` int(20) NOT NULL DEFAULT -1,
34 `confirmID` int(20) NOT NULL DEFAULT -1,
35 `isDopt` int(1) NOT NULL DEFAULT 0,
36 `isOpt` int(1) NOT NULL DEFAULT 0,
37 `redirectInEmail` varchar(255),
38 `redirectInForm` varchar(255),
39 `successMsg` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
40 `errorMsg` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
41 `existMsg` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
42 `invalidMsg` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
43 `requiredMsg` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
44 `attributes` TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci,
45 `date` DATE NOT NULL,
46 `isDefault` int(1) NOT NULL DEFAULT 0,
47 `gCaptcha` int(1) NOT NULL DEFAULT 0,
48 `gCaptcha_secret` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
49 `gCaptcha_site` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
50 `termAccept` int(1) NOT NULL DEFAULT 0,
51 `termsURL` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
52 PRIMARY KEY (`id`)
53 );';
54 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
55 $wpdb->query($creation_query);
56 // create default form.
57 $rows = $wpdb->get_results('SELECT * FROM '. $wpdb->prefix . self::TABLE_NAME );
58 if (count( $rows ) == 0 )
59 {
60 self::createDefaultForm();
61 }
62 }
63
64 /**
65 * Remove table
66 */
67 public static function removeTable() {
68 global $wpdb;
69 $query = 'DROP TABLE IF EXISTS ' . $wpdb->prefix . self::TABLE_NAME . ';';
70 $wpdb->query( $query ); // db call ok; no-cache ok.
71 }
72
73 /**
74 * Add columns for old versions
75 */
76 public static function alterTable() {
77 global $wpdb;
78 // add columns -gCaptcha, gCaptcha_secret.
79 $table_name = $wpdb->prefix . self::TABLE_NAME;
80
81 // check if gCaptcha fields exist
82 $gCaptcha = 'gCaptcha';
83 $result = $wpdb->query( $wpdb->prepare( "SHOW COLUMNS FROM `$table_name` LIKE %s ", $gCaptcha ) ); // db call ok; no-cache ok.
84
85 if ( empty( $result ) ) {
86 $alter_query = 'ALTER TABLE ' . $table_name . '
87 ADD COLUMN gCaptcha int(1) not NULL DEFAULT 0,
88 ADD COLUMN gCaptcha_secret varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
89 ADD COLUMN gCaptcha_site varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci';
90 $ret = $wpdb->query( $alter_query );
91 }
92
93 // add columns -termAccept, termsURL : version 2.9.0
94 $check_query = 'SHOW COLUMNS FROM `' . $table_name . "` LIKE 'termAccept';";
95 $result = $wpdb->query( $check_query );
96 if ( empty( $result ) ) {
97 $alter_query = 'ALTER TABLE ' . $table_name . '
98 ADD COLUMN termAccept int(1) not NULL DEFAULT 1,
99 ADD COLUMN termsURL varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci';
100 $ret = $wpdb->query( $alter_query );
101 }
102 // add columns - confirmID : version 2.9.0
103 $check_query = 'SHOW COLUMNS FROM `' . $table_name . "` LIKE 'confirmID';";
104 $result = $wpdb->query( $check_query );
105 if ( empty( $result ) ) {
106 $alter_query = 'ALTER TABLE ' . $table_name . '
107 ADD COLUMN confirmID int(20) not NULL DEFAULT -1';
108 $ret = $wpdb->query( $alter_query );
109 }
110 // add columns - requiredMsg : version 2.9.3
111 $check_query = 'SHOW COLUMNS FROM `' . $table_name . "` LIKE 'requiredMsg';";
112 $result = $wpdb->query( $check_query );
113 if ( empty( $result ) ) {
114 $alter_query = 'ALTER TABLE ' . $table_name . '
115 ADD COLUMN requiredMsg varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci';
116 $ret = $wpdb->query( $alter_query );
117 }
118 }
119
120 /**
121 * Get form data
122 *
123 * @param string $frmID - form ID.
124 * @return array|null|object|void
125 */
126 public static function getForm( $frmID = 'new' ) {
127 global $wpdb;
128 if ( 'new' == $frmID ) {
129 // default form.
130 $formData = self::getDefaultForm();
131 $list = maybe_serialize( array( SIB_API_Manager::get_default_list_id() ) );
132 $results = array(
133 'title' => '',
134 'html' => $formData['html'],// phpcs:ignore
135 'css' => $formData['css'],
136 'listID' => $list,
137 'dependTheme' => '1',
138 'templateID' => '-1',
139 'confirmID' => '-1',
140 'isOpt' => '0',
141 'isDopt' => '0',
142 'redirectInEmail' => '',
143 'redirectInForm' => '',
144 'date' => date( 'Y-m-d' ),
145 'successMsg' => $formData['successMsg'],
146 'errorMsg' => $formData['errorMsg'],
147 'existMsg' => $formData['existMsg'],
148 'invalidMsg' => $formData['invalidMsg'],
149 'requiredMsg' => $formData['requiredMsg'],
150 'attributes' => 'email,NAME',
151 );
152 } else {
153 $query = $wpdb->prepare('SELECT * from ' . $wpdb->prefix . self::TABLE_NAME . ' where id = %d',array(esc_sql($frmID)));
154 $results = $wpdb->get_row( $query, ARRAY_A ); // db call ok; no-cache ok.
155 }
156
157 if ( is_array( $results ) && count( $results ) > 0 ) {
158 $listIDs = maybe_unserialize( $results['listID'] );
159 $results['listID'] = $listIDs;
160 return $results;
161 }
162 return array();
163 }
164
165 /**
166 * Get all forms
167 */
168 public static function getForms() {
169 global $wpdb;
170
171 $query = 'select * from ' . $wpdb->prefix . self::TABLE_NAME . ';';
172 $results = $wpdb->get_results( $query, ARRAY_A ); // db call ok; no-cache ok.
173
174 if ( is_array( $results ) && count( $results ) > 0 ) {
175 // add list names field to display form table.
176 foreach ( $results as $key => $form ) {
177 if ( SIB_Forms_Lang::check_form_trans( $form['id'] ) == true ) {
178 unset( $results[ $key ] );
179 continue;
180 }
181 $listIDs = maybe_unserialize( $form['listID'] );
182 $listIDs = !empty($listIDs) ? $listIDs : array();
183 // get names form id array.
184 $lists = SIB_API_Manager::get_lists(); // pair of id and name.
185
186 $listNames = array();
187 foreach ( $lists as $list ) {
188 if ( in_array( $list['id'], $listIDs ) ) {
189 $listNames[] = $list['name'];
190 }
191 }
192 $results[ $key ]['listName'] = implode( ',', $listNames );
193 $results[ $key ]['listID'] = $listIDs;
194 }
195 return $results;
196 }
197 return array();
198
199 }
200
201 /**
202 * Add new form
203 *
204 * @param array $formData - form data.
205 * @return null|string
206 */
207 public static function addForm( $formData ) {
208 global $wpdb;
209
210 $current_date = date( 'Y-m-d' );
211
212 global $wpdb;
213 $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 ';
214 $query .= ' (%s, %s, %s, %d, %s, %d, %d, %d, %d, %s, %s, %s, %s, %s, %s, %s, %s, %s, %d, %s, %s, %d, %s)';
215
216 $query = $wpdb->prepare($query,array($formData['title'],$formData['html'],$formData['css'],$formData['dependTheme'],$formData['listID'],
217 $formData['templateID'],$formData['confirmID'],$formData['isOpt'],$formData['isDopt'],$formData['redirectInEmail'],$formData['redirectInForm'],
218 $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']));
219
220 $wpdb->query( $query ); // db call ok; no-cache ok.
221 $index = $wpdb->get_var( 'SELECT LAST_INSERT_ID();' ); // db call ok; no-cache ok.
222 return $index;
223 }
224
225 /**
226 * Update form
227 *
228 * @param int $formID - form ID.
229 * @param array $formData - form data.
230 * @return bool
231 */
232 public static function updateForm( $formID, $formData ) {
233 global $wpdb;
234
235 $current_date = date( 'Y-m-d' );
236
237 global $wpdb;
238
239 $query = 'UPDATE ' . $wpdb->prefix . self::TABLE_NAME ;
240 $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";
241 $query .= ' where id= %d';
242
243 $query = $wpdb->prepare( $query ,array($formData['title'],$formData['html'],$formData['css'],$formData['dependTheme'],$formData['listID'],
244 $formData['templateID'],$formData['confirmID'],$formData['isOpt'],$formData['isDopt'],$formData['redirectInEmail'],$formData['redirectInForm'],
245 $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)));
246
247
248 $wpdb->query( $query ); // db call ok; no-cache ok.
249
250 return true;
251 }
252
253 /**
254 * Remove form
255 *
256 * @param int $id - target form id.
257 */
258 public static function deleteForm( $id ) {
259 global $wpdb;
260
261 $wpdb->delete(
262 $wpdb->prefix . self::TABLE_NAME,
263 array(
264 'id' => $id,
265 )
266 ); // db call ok; no-cache ok.
267 }
268
269 /** Clear forms data */
270 public static function removeAllForms() {
271 global $wpdb;
272 $wpdb->query( 'TRUNCATE TABLE ' . $wpdb->prefix . self::TABLE_NAME ); // db call ok; no-cache ok.
273 return true;
274 }
275
276 /** Create default form */
277 public static function createDefaultForm() {
278 $formData = self::getDefaultForm();
279 // phpcs:ignore
280 $html = $formData['html'];
281 $css = $formData['css'];
282 $list = maybe_serialize( array( SIB_API_Manager::get_default_list_id() ) );
283 $current_date = date( 'Y-m-d' );
284 $attributes = 'email,NAME';
285 global $wpdb;
286 $query = 'INSERT INTO ' . $wpdb->prefix . self::TABLE_NAME . ' ';
287 $deafult_form_name = esc_attr( __( 'Default Form', 'mailin' ) );
288 $query .= '(title,html,css,listID,dependTheme,successMsg,errorMsg,existMsg,invalidMsg,requiredMsg,attributes,date,isDefault) ';
289 $query .= "VALUES ('{$deafult_form_name}','{$html}','{$css}','{$list}','1','{$formData['successMsg']}','{$formData['errorMsg']}','{$formData['existMsg']}','{$formData['invalidMsg']}','{$formData['requiredMsg']}','{$attributes}','{$current_date}','1')";
290 $wpdb->query( $query ); // db call ok; no-cache ok.
291 }
292
293 /** Get default form data */
294 public static function getDefaultForm() {
295 $html = <<<EOD
296 <p class="sib-email-area">
297 <label class="sib-email-area">Email Address*</label>
298 <input type="email" class="sib-email-area" name="email" required="required">
299 </p>
300 <p class="sib-NAME-area">
301 <label class="sib-NAME-area">Name</label>
302 <input type="text" class="sib-NAME-area" name="NAME" >
303 </p>
304 <p>
305 <input type="submit" class="sib-default-btn" value="Subscribe">
306 </p>
307 EOD;
308 $css = <<<EOD
309 [form] {
310 padding: 5px;
311 -moz-box-sizing:border-box;
312 -webkit-box-sizing: border-box;
313 box-sizing: border-box;
314 }
315 [form] input[type=text],[form] input[type=email], [form] select {
316 width: 100%;
317 border: 1px solid #bbb;
318 height: auto;
319 margin: 5px 0 0 0;
320 }
321 [form] .sib-default-btn {
322 margin: 5px 0;
323 padding: 6px 12px;
324 color:#fff;
325 background-color: #333;
326 border-color: #2E2E2E;
327 font-size: 14px;
328 font-weight:400;
329 line-height: 1.4285;
330 text-align: center;
331 cursor: pointer;
332 vertical-align: middle;
333 -webkit-user-select:none;
334 -moz-user-select:none;
335 -ms-user-select:none;
336 user-select:none;
337 white-space: normal;
338 border:1px solid transparent;
339 border-radius: 3px;
340 }
341 [form] .sib-default-btn:hover {
342 background-color: #444;
343 }
344 [form] p{
345 margin: 10px 0 0 0;
346 }
347 EOD;
348
349 $result = array(
350 'html' => $html,
351 'css' => $css,
352 'successMsg' => esc_attr( __( 'Thank you, you have successfully registered !', 'mailin' ) ),
353 'errorMsg' => esc_attr( __( 'Something wrong occured', 'mailin' ) ),
354 'existMsg' => esc_attr( __( 'You have already registered', 'mailin' ) ),
355 'invalidMsg' => esc_attr( __( 'Your email address is invalid', 'mailin' ) ),
356 'requiredMsg' => esc_attr(__('Please fill out this field', 'mailin'))
357 );
358 return $result;
359 }
360
361 /** Get Default css */
362 public static function getDefaultMessageCss() {
363 $css = <<<EOD
364 [form] p.sib-alert-message {
365 padding: 6px 12px;
366 margin-bottom: 20px;
367 border: 1px solid transparent;
368 border-radius: 4px;
369 -webkit-box-sizing: border-box;
370 -moz-box-sizing: border-box;
371 box-sizing: border-box;
372 }
373 [form] p.sib-alert-message-error {
374 background-color: #f2dede;
375 border-color: #ebccd1;
376 color: #a94442;
377 }
378 [form] p.sib-alert-message-success {
379 background-color: #dff0d8;
380 border-color: #d6e9c6;
381 color: #3c763d;
382 }
383 [form] p.sib-alert-message-warning {
384 background-color: #fcf8e3;
385 border-color: #faebcc;
386 color: #8a6d3b;
387 }
388 EOD;
389 return $css;
390
391 }
392
393 /**
394 * Get form data of old version
395 * We suppose that the clients have got own setting values for form.
396 * If the client have default setting only then it will be return error.
397 * This function will be removed after next version
398 */
399 public static function get_old_form() {
400 // create form from old version.
401 $form_settings = get_option( 'sib_subscription_option' );
402 $html = $form_settings['sib_form_html'];
403 $avail_atts = $form_settings['available_attributes'];
404
405 $signup_settings = get_option( 'sib_signup_option' );
406 $is_confirm_email = 'yes' == $signup_settings['is_confirm_email'] ? 1 : 0;
407 $is_double_optin = 'yes' == $signup_settings['is_double_optin'] ? 1 : 0;
408 $redirect_url = $signup_settings['redirect_url'];
409 $redirect_url_click = $signup_settings['redirect_url_click'];
410 $template_id = 1 == $is_confirm_email ? $signup_settings['template_id'] : $signup_settings['doubleoptin_template_id'];
411
412 $confirmMsg = get_option( 'sib_confirm_option' );
413
414 $homeSetting = get_option( 'sib_home_option' );
415 $sib_list = maybe_serialize( array( (string) $homeSetting['list_id'] ) );
416
417 $formData = array(
418 'title' => 'Old Form',
419 'html' => $html,
420 'css' => '',
421 'dependTheme' => '1',
422 'listID' => $sib_list,
423 'templateID' => $template_id,
424 'isOpt' => $is_confirm_email,
425 'isDopt' => $is_double_optin,
426 'redirectInEmail' => $redirect_url,
427 'redirectInForm' => $redirect_url_click,
428 'successMsg' => $confirmMsg['alert_success_message'],
429 'errorMsg' => $confirmMsg['alert_error_message'],
430 'existMsg' => $confirmMsg['alert_exist_subscriber'],
431 'invalidMsg' => $confirmMsg['alert_invalid_email'],
432 'attributes' => 'email,' . implode( ',', $avail_atts ),
433 );
434
435 return $formData;
436 }
437
438 /**
439 * Add prefix to the table
440 */
441 public static function add_prefix() {
442 global $wpdb;
443 if (self::forms_table_exists()) {
444 $query = 'ALTER TABLE ' . self::TABLE_NAME . ' RENAME TO ' . $wpdb->prefix . self::TABLE_NAME . ';';
445 $wpdb->query( $query ); // db call ok; no-cache ok.
446 }
447 }
448
449 /**
450 * Change datatype of attribute column
451 */
452 public static function modify_datatype() {
453 global $wpdb;
454 if (self::forms_table_exists()) {
455 $tableStructure = $wpdb->get_results( "DESC " . $wpdb->prefix . self::TABLE_NAME );
456 foreach ($tableStructure as $key => $value)
457 {
458 if($value->Field == "attributes" && $value->Type == "varchar(255)")
459 $wpdb->query("ALTER TABLE ". $wpdb->prefix . self::TABLE_NAME." MODIFY ".$value->Field." TEXT DEFAULT NULL");
460 }
461 }
462 }
463
464 /**
465 * @return bool
466 */
467 public static function forms_table_exists()
468 {
469 global $wpdb;
470 return $wpdb->get_var( "SHOW TABLES LIKE '" . self::TABLE_NAME . "'" ) == self::TABLE_NAME;
471 }
472
473 }
474 }
475