PluginProbe ʕ •ᴥ•ʔ
Brevo – Email, SMS, Web Push, Chat, and more. / 3.1.67
Brevo – Email, SMS, Web Push, Chat, and more. v3.1.67
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
417 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 ( is_array( $results ) && count( $results ) > 0 ) {
161 $listIDs = maybe_unserialize( $results['listID'] );
162 $results['listID'] = $listIDs;
163 return $results;
164 }
165 return array();
166 }
167
168 /**
169 * Get all forms
170 */
171 public static function getForms() {
172 global $wpdb;
173
174 $query = 'select * from ' . $wpdb->prefix . self::TABLE_NAME . ';';
175 $results = $wpdb->get_results( $query, ARRAY_A ); // db call ok; no-cache ok.
176
177 if ( is_array( $results ) && count( $results ) > 0 ) {
178 // add list names field to display form table.
179 foreach ( $results as $key => $form ) {
180 if ( SIB_Forms_Lang::check_form_trans( $form['id'] ) == true ) {
181 unset( $results[ $key ] );
182 continue;
183 }
184 $listIDs = maybe_unserialize( $form['listID'] );
185 $listIDs = !empty($listIDs) ? $listIDs : array();
186 // get names form id array.
187 $lists = SIB_API_Manager::get_lists(); // pair of id and name.
188
189 $listNames = array();
190 foreach ( $lists as $list ) {
191 if ( in_array( $list['id'], $listIDs ) ) {
192 $listNames[] = $list['name'];
193 }
194 }
195 $results[ $key ]['listName'] = implode( ',', $listNames );
196 $results[ $key ]['listID'] = $listIDs;
197 }
198 return $results;
199 }
200 return array();
201
202 }
203
204 /**
205 * Add new form
206 *
207 * @param array $formData - form data.
208 * @return null|string
209 */
210 public static function addForm( $formData ) {
211 global $wpdb;
212
213 $current_date = date( 'Y-m-d' );
214
215 global $wpdb;
216 $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 ';
217 $query .= ' (%s, %s, %s, %d, %s, %d, %d, %d, %d, %s, %s, %s, %s, %s, %s, %s, %s, %s, %d, %s, %s, %d, %s)';
218
219 $query = $wpdb->prepare($query,array($formData['title'],$formData['html'],$formData['css'],$formData['dependTheme'],$formData['listID'],
220 $formData['templateID'],$formData['confirmID'],$formData['isOpt'],$formData['isDopt'],$formData['redirectInEmail'],$formData['redirectInForm'],
221 $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']));
222
223 $wpdb->query( $query ); // db call ok; no-cache ok.
224 $index = $wpdb->get_var( 'SELECT LAST_INSERT_ID();' ); // db call ok; no-cache ok.
225 return $index;
226 }
227
228 /**
229 * Update form
230 *
231 * @param int $formID - form ID.
232 * @param array $formData - form data.
233 * @return bool
234 */
235 public static function updateForm( $formID, $formData ) {
236 global $wpdb;
237
238 $current_date = date( 'Y-m-d' );
239
240 global $wpdb;
241
242 $query = 'UPDATE ' . $wpdb->prefix . self::TABLE_NAME ;
243 $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";
244 $query .= ' where id= %d';
245
246 $query = $wpdb->prepare( $query ,array($formData['title'],$formData['html'],$formData['css'],$formData['dependTheme'],$formData['listID'],
247 $formData['templateID'],$formData['confirmID'],$formData['isOpt'],$formData['isDopt'],$formData['redirectInEmail'],$formData['redirectInForm'],
248 $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)));
249
250
251 $wpdb->query( $query ); // db call ok; no-cache ok.
252
253 return true;
254 }
255
256 /**
257 * Remove form
258 *
259 * @param int $id - target form id.
260 */
261 public static function deleteForm( $id ) {
262 global $wpdb;
263
264 $wpdb->delete(
265 $wpdb->prefix . self::TABLE_NAME,
266 array(
267 'id' => $id,
268 )
269 ); // db call ok; no-cache ok.
270 }
271
272 /** Clear forms data */
273 public static function removeAllForms() {
274 global $wpdb;
275 $wpdb->query( 'TRUNCATE TABLE ' . $wpdb->prefix . self::TABLE_NAME ); // db call ok; no-cache ok.
276 return true;
277 }
278
279 /** Create default form */
280 public static function createDefaultForm() {
281 $formData = self::getDefaultForm();
282 // phpcs:ignore
283 $html = $formData['html'];
284 $css = $formData['css'];
285 $list = maybe_serialize( array( SIB_API_Manager::get_default_list_id() ) );
286 $current_date = date( 'Y-m-d' );
287 $attributes = 'email,NAME';
288 global $wpdb;
289 $query = 'INSERT INTO ' . $wpdb->prefix . self::TABLE_NAME . ' ';
290 $deafult_form_name = esc_attr( __( 'Default Form', 'mailin' ) );
291 $query .= '(title,html,css,listID,dependTheme,successMsg,errorMsg,existMsg,invalidMsg,requiredMsg,attributes,date,isDefault) ';
292 $query .= "VALUES ('{$deafult_form_name}','{$html}','{$css}','{$list}','1','{$formData['successMsg']}','{$formData['errorMsg']}','{$formData['existMsg']}','{$formData['invalidMsg']}','{$formData['requiredMsg']}','{$attributes}','{$current_date}','1')";
293 $wpdb->query( $query ); // db call ok; no-cache ok.
294 }
295
296 /** Get default form data */
297 public static function getDefaultForm() {
298
299 $html = wp_kses(self::get_default_form_html(), SIB_Manager::SIB_ATTRIBUTE);
300 $css = wp_kses(self::get_default_css_html(), SIB_Manager::SIB_ATTRIBUTE);
301
302 $result = array(
303 'html' => $html,
304 'css' => $css,
305 'successMsg' => esc_attr( __( 'Thank you, you have successfully registered !', 'mailin' ) ),
306 'errorMsg' => esc_attr( __( 'Something wrong occured', 'mailin' ) ),
307 'existMsg' => esc_attr( __( 'You have already registered', 'mailin' ) ),
308 'invalidMsg' => esc_attr( __( 'Your email address is invalid', 'mailin' ) ),
309 'requiredMsg' => esc_attr(__('Please fill out this field', 'mailin'))
310 );
311 return $result;
312 }
313
314 /** Get Default css */
315 public static function getDefaultMessageCss() {
316 $css = file_get_contents(__DIR__ . '/' . self::DEFAULT_FORM_MESSAGE_CSS_PATH) ?: '';
317 return wp_kses($css, SIB_Manager::SIB_ATTRIBUTE);
318 }
319
320 /**
321 * Get form data of old version
322 * We suppose that the clients have got own setting values for form.
323 * If the client have default setting only then it will be return error.
324 * This function will be removed after next version
325 */
326 public static function get_old_form() {
327 // create form from old version.
328 $form_settings = get_option( 'sib_subscription_option' );
329 $html = $form_settings['sib_form_html'];
330 $avail_atts = $form_settings['available_attributes'];
331
332 $signup_settings = get_option( 'sib_signup_option' );
333 $is_confirm_email = 'yes' == $signup_settings['is_confirm_email'] ? 1 : 0;
334 $is_double_optin = 'yes' == $signup_settings['is_double_optin'] ? 1 : 0;
335 $redirect_url = $signup_settings['redirect_url'];
336 $redirect_url_click = $signup_settings['redirect_url_click'];
337 $template_id = 1 == $is_confirm_email ? $signup_settings['template_id'] : $signup_settings['doubleoptin_template_id'];
338
339 $confirmMsg = get_option( 'sib_confirm_option' );
340
341 $homeSetting = get_option( 'sib_home_option' );
342 $sib_list = maybe_serialize( array( (string) $homeSetting['list_id'] ) );
343
344 $formData = array(
345 'title' => 'Old Form',
346 'html' => $html,
347 'css' => '',
348 'dependTheme' => '1',
349 'listID' => $sib_list,
350 'templateID' => $template_id,
351 'isOpt' => $is_confirm_email,
352 'isDopt' => $is_double_optin,
353 'redirectInEmail' => $redirect_url,
354 'redirectInForm' => $redirect_url_click,
355 'successMsg' => $confirmMsg['alert_success_message'],
356 'errorMsg' => $confirmMsg['alert_error_message'],
357 'existMsg' => $confirmMsg['alert_exist_subscriber'],
358 'invalidMsg' => $confirmMsg['alert_invalid_email'],
359 'attributes' => 'email,' . implode( ',', $avail_atts ),
360 );
361
362 return $formData;
363 }
364
365 /**
366 * Add prefix to the table
367 */
368 public static function add_prefix() {
369 global $wpdb;
370 if (self::forms_table_exists()) {
371 $query = 'ALTER TABLE ' . self::TABLE_NAME . ' RENAME TO ' . $wpdb->prefix . self::TABLE_NAME . ';';
372 $wpdb->query( $query ); // db call ok; no-cache ok.
373 }
374 }
375
376 /**
377 * Change datatype of attribute column
378 */
379 public static function modify_datatype() {
380 global $wpdb;
381 if (self::forms_table_exists()) {
382 $tableStructure = $wpdb->get_results( "DESC " . $wpdb->prefix . self::TABLE_NAME );
383 foreach ($tableStructure as $key => $value)
384 {
385 if($value->Field == "attributes" && $value->Type == "varchar(255)")
386 $wpdb->query("ALTER TABLE ". $wpdb->prefix . self::TABLE_NAME." MODIFY ".$value->Field." TEXT DEFAULT NULL");
387 }
388 }
389 }
390
391 /**
392 * @return bool
393 */
394 public static function forms_table_exists()
395 {
396 global $wpdb;
397 return $wpdb->get_var( "SHOW TABLES LIKE '" . self::TABLE_NAME . "'" ) == self::TABLE_NAME;
398 }
399
400 /**
401 * @return string
402 */
403 public static function get_default_form_html()
404 {
405 return file_get_contents(__DIR__ . '/' . self::DEFAULT_FORM_HTML_PATH) ?: '';
406 }
407
408 /**
409 * @return string
410 */
411 public static function get_default_css_html()
412 {
413 return file_get_contents(__DIR__ . '/' . self::DEFAULT_FORM_CSS_PATH) ?: '';
414 }
415 }
416 }
417