PluginProbe ʕ •ᴥ•ʔ
Brevo – Email, SMS, Web Push, Chat, and more. / 3.0.6
Brevo – Email, SMS, Web Push, Chat, and more. v3.0.6
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 / sendinblue.php
mailin Last commit date
css 5 years ago img 5 years ago inc 5 years ago js 5 years ago lang 5 years ago model 5 years ago page 5 years ago widget 5 years ago index.php 5 years ago readme.txt 5 years ago screenshot-1.png 5 years ago screenshot-2.png 5 years ago screenshot-3.png 5 years ago screenshot-4.png 5 years ago screenshot-5.png 5 years ago screenshot-6.png 5 years ago screenshot-7.png 5 years ago screenshot-8.png 5 years ago screenshot-9.png 5 years ago sendinblue.php 5 years ago
sendinblue.php
1301 lines
1 <?php
2 /**
3 * Plugin Name: Newsletter, SMTP, Email marketing and Subscribe forms by Sendinblue
4 * Plugin URI: https://www.sendinblue.com/?r=wporg
5 * Description: Manage your contact lists, subscription forms and all email and marketing-related topics from your wp panel, within one single plugin
6 * Version: 3.0.6
7 * Author: Sendinblue
8 * Author URI: https://www.sendinblue.com/?r=wporg
9 * License: GPLv2 or later
10 *
11 * @package SIB
12 */
13
14 /*
15 This program is free software; you can redistribute it and/or
16 modify it under the terms of the GNU General Public License
17 as published by the Free Software Foundation; either version 2
18 of the License, or (at your option) any later version.
19 This program is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
25 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26 */
27
28 /**
29 * Application entry point. Contains plugin startup class that loads on <i> sendinblue_init </i> action.
30 */
31 if ( ! class_exists( 'Mailin' ) ) {
32 require_once( 'inc/mailin.php' );
33 }
34 if ( ! class_exists( 'SendinblueApiClient' ) ) {
35 require_once( 'inc/SendinblueApiClient.php' );
36 }
37 // For marketing automation.
38 if ( ! class_exists( 'Sendinblue' ) ) {
39 require_once( 'inc/sendinblue.php' );
40 }
41
42 if ( ! class_exists( 'SIB_Manager' ) ) {
43 register_deactivation_hook( __FILE__, array( 'SIB_Manager', 'deactivate' ) );
44 register_activation_hook( __FILE__, array( 'SIB_Manager', 'install' ) );
45 register_uninstall_hook( __FILE__, array( 'SIB_Manager', 'uninstall' ) );
46
47 require_once( 'page/page-home.php' );
48 require_once( 'page/page-form.php' );
49 require_once( 'page/page-statistics.php' );
50 require_once( 'page/page-scenarios.php' );
51 require_once( 'widget/widget_form.php' );
52 require_once( 'inc/table-forms.php' );
53 require_once( 'inc/sib-api-manager.php' );
54 require_once( 'inc/sib-sms-code.php' );
55 require_once( 'model/model-forms.php' );
56 require_once( 'model/model-users.php' );
57 require_once( 'model/model-lang.php' );
58
59 /**
60 * Class SIB_Manager
61 */
62 class SIB_Manager {
63
64 /** Main setting option name */
65 const MAIN_OPTION_NAME = 'sib_main_option';
66
67 /** Home setting option name */
68 const HOME_OPTION_NAME = 'sib_home_option';
69
70 /** Access token option name */
71 const ACCESS_TOKEN_OPTION_NAME = 'sib_token_store';
72
73 /** Plugin language notice option name */
74 const LANGUAGE_OPTION_NAME = 'sib_language_notice_option';
75
76 /** Temp list of Dopt option name */
77 const TEMPLIST_OPTION_NAME = 'sib_temp_list';
78
79 /** Form preview option name */
80 const PREVIEW_OPTION_NAME = 'sib_preview_form';
81
82 const API_KEY_V3_OPTION_NAME = 'sib_api_key_v3';
83
84 /** Request url of sendinblue api */
85 const SENDINBLUE_API_URL = 'https://api.sendinblue.com/v2.0';
86 const RECAPTCHA_API_TEMPLATE = 'https://www.google.com/recaptcha/api/siteverify?%s';
87
88 /**
89 * API key
90 *
91 * @var $access_key
92 */
93 public static $access_key;
94
95 /**
96 * Store instance
97 *
98 * @var $instance
99 */
100 public static $instance;
101
102 /**
103 * Plugin directory path value. set in constructor
104 *
105 * @var $plugin_dir
106 */
107 public static $plugin_dir;
108
109 /**
110 * Plugin url. set in constructor
111 *
112 * @var $plugin_url
113 */
114 public static $plugin_url;
115
116 /**
117 * Plugin name. set in constructor
118 *
119 * @var $plugin_name
120 */
121 public static $plugin_name;
122
123 /**
124 * Check if wp_mail is declared
125 *
126 * @var $wp_mail_conflict
127 */
128 static $wp_mail_conflict;
129
130 /**
131 * Class constructor
132 * Sets plugin url and directory and adds hooks to <i>init</i>. <i>admin_menu</i>
133 */
134 function __construct() {
135 // get basic info.
136 self::$plugin_dir = plugin_dir_path( __FILE__ );
137 self::$plugin_url = plugins_url( '', __FILE__ );
138 self::$plugin_name = plugin_basename( __FILE__ );
139
140 self::$wp_mail_conflict = false;
141
142 // api key for sendinblue.
143 $general_settings = get_option( self::MAIN_OPTION_NAME, array() );
144 self::$access_key = isset( $general_settings['access_key'] ) ? $general_settings['access_key'] : '';
145
146 self::$instance = $this;
147
148 add_action( 'admin_init', array( &$this, 'admin_init' ), 9999 );
149 add_action( 'admin_menu', array( &$this, 'admin_menu' ), 9999 );
150
151 add_action( 'wp_print_scripts', array( &$this, 'frontend_register_scripts' ), 9999 );
152 add_action( 'wp_enqueue_scripts', array( &$this, 'wp_head_ac' ), 999 );
153
154 // create custom url for form preview.
155 add_filter( 'query_vars', array( &$this, 'sib_query_vars' ) );
156 add_action( 'parse_request', array( &$this, 'sib_parse_request' ) );
157
158 add_action( 'wp_ajax_sib_validate_process', array( 'SIB_Page_Home', 'ajax_validation_process' ) );
159 add_action( 'wp_ajax_sib_validate_ma', array( 'SIB_Page_Home', 'ajax_validate_ma' ) );
160 add_action( 'wp_ajax_sib_activate_email_change', array( 'SIB_Page_Home', 'ajax_activate_email_change' ) );
161 add_action( 'wp_ajax_sib_sender_change', array( 'SIB_Page_Home', 'ajax_sender_change' ) );
162 add_action( 'wp_ajax_sib_send_email', array( 'SIB_Page_Home', 'ajax_send_email' ) );
163 add_action( 'wp_ajax_sib_remove_cache', array( 'SIB_Page_Home', 'ajax_remove_cache' ) );
164 add_action( 'wp_ajax_sib_sync_users', array( 'SIB_Page_Home', 'ajax_sync_users' ) );
165
166 add_action( 'wp_ajax_sib_change_template', array( 'SIB_Page_Form', 'ajax_change_template' ) );
167 add_action( 'wp_ajax_sib_get_lists', array( 'SIB_Page_Form', 'ajax_get_lists' ) );
168 add_action( 'wp_ajax_sib_get_templates', array( 'SIB_Page_Form', 'ajax_get_templates' ) );
169 add_action( 'wp_ajax_sib_get_attributes', array( 'SIB_Page_Form', 'ajax_get_attributes' ) );
170 add_action( 'wp_ajax_sib_update_form_html', array( 'SIB_Page_Form', 'ajax_update_html' ) );
171 add_action( 'wp_ajax_sib_copy_origin_form', array( 'SIB_Page_Form', 'ajax_copy_origin_form' ) );
172
173 add_action( 'wp_ajax_sib_get_country_prefix', array( $this, 'ajax_get_country_prefix' ) );
174 add_action( 'wp_ajax_nopriv_sib_get_country_prefix', array( $this, 'ajax_get_country_prefix' ) );
175
176 add_action( 'init', array( &$this, 'init' ) );
177
178 add_action( 'wp_login', array( &$this, 'sib_wp_login_identify' ), 10, 2 );
179
180 // change sib tables name on prior(2.6.9) versions.
181 SIB_Model_Users::add_prefix();
182 SIB_Forms::add_prefix();
183 SIB_Forms::modify_datatype();
184
185 if ( self::is_api_key_set() ) {
186 add_shortcode( 'sibwp_form', array( &$this, 'sibwp_form_shortcode' ) );
187 // register widget.
188 add_action( 'widgets_init', array( &$this, 'sib_create_widget' ) );
189
190 // create forms tables and create default form.
191 SIB_Forms::createTable();
192 // create users table.
193 SIB_Model_Users::createTable();
194 // add columns for old versions
195 SIB_Forms::alterTable();
196 }
197
198 $use_api_version = get_option( 'sib_use_apiv2', '0' );
199 if ( '0' === $use_api_version ) {
200 self::uninstall();
201 update_option( 'sib_use_apiv2', '1' );
202 }
203
204 // Wpml plugin part.
205 if ( ! function_exists( 'is_plugin_active_for_network' ) ) :
206 require_once( ABSPATH . '/wp-admin/includes/plugin.php' );
207 endif;
208 if ( in_array( 'sitepress-multilingual-cms/sitepress.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) || is_plugin_active_for_network( 'sitepress-multilingual-cms/sitepress.php' ) ) {
209 SIB_Forms_Lang::createTable();
210 add_action( 'sib_language_sidebar', array( $this, 'sib_create_language_sidebar' ) );
211 }
212
213 /**
214 * Hook wp_mail to send transactional emails
215 */
216
217 // check if wp_mail function is already declared by others.
218 if ( function_exists( 'wp_mail' ) ) {
219 self::$wp_mail_conflict = true;
220 }
221 $home_settings = get_option( SIB_Manager::HOME_OPTION_NAME, array() );
222
223 if( 'yes' === $home_settings['activate_email'] )
224 {
225 if ( false === self::$wp_mail_conflict ) {
226 /**
227 * Declare wp_mail function for Sendinblue SMTP module
228 *
229 * @param string $to - receiption email.
230 * @param string $subject - subject of email.
231 * @param string $message - message content.
232 * @param string $headers - header of email.
233 * @param array $attachments - attachments.
234 * @return bool
235 */
236 function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() ) {
237 $message = str_replace( 'NF_SIB', '', $message );
238 $message = str_replace( 'WC_SIB', '', $message );
239 try {
240 $sent = SIB_Manager::sib_email( $to, $subject, $message, $headers, $attachments );
241 if ( is_wp_error( $sent ) || ! isset( $sent['code'] ) || 'success' !== $sent['code'] ) {
242 return SIB_Manager::wp_mail_native( $to, $subject, $message, $headers, $attachments );
243 }
244 return true;
245 } catch ( Exception $e ) {
246 return SIB_Manager::wp_mail_native( $to, $subject, $message, $headers, $attachments );
247 }
248 }
249 } else {
250 add_action( 'admin_notices', array( &$this, 'wpMailNotices' ) );
251 return;
252 }
253 }
254 }
255
256 /**
257 * Add identify tag for login users
258 *
259 * @param string $user_login - user login name.
260 * @param array $user - user.
261 */
262 function sib_wp_login_identify( $user_login, $user ) {
263
264 $userEmail = $user->user_email;
265 $data = array(
266 'email_id' => $userEmail,
267 'name' => $user_login,
268 );
269 SIB_API_Manager::identify_user( $data );
270 }
271
272 /**
273 * Initialize method. called on <i>init</i> action
274 */
275 function init() {
276 // Sign up process.
277 if ( isset( $_POST['sib_form_action'] ) && ( 'subscribe_form_submit' == sanitize_text_field($_POST['sib_form_action']) ) ) {
278 $this->signup_process();
279 }
280 // Subscribe.
281 if ( isset( $_GET['sib_action'] ) && ( 'subscribe' == sanitize_text_field($_GET['sib_action']) ) ) {
282 SIB_API_Manager::subscribe();
283 exit;
284 }
285 // Dismiss language notice.
286 if ( isset( $_GET['dismiss_admin_lang_notice'] ) && '1' == sanitize_text_field($_GET['dismiss_admin_lang_notice']) ) {
287 update_option( SIB_Manager::LANGUAGE_OPTION_NAME, true );
288 wp_safe_redirect( $_SERVER['HTTP_REFERER'] );
289 exit();
290 }
291
292 $api_key_v3 = get_option(SIB_Manager::API_KEY_V3_OPTION_NAME);
293 if (empty($api_key_v3)) {
294 $general_settings = get_option( self::MAIN_OPTION_NAME, array() );
295 if (isset($general_settings['access_key'])) {
296 $client = new Mailin(SIB_Manager::SENDINBLUE_API_URL, $general_settings['access_key']);
297 $response = $client->generateApiV3Key();
298 if (!empty($response['data']['value'])) {
299 update_option(SIB_Manager::API_KEY_V3_OPTION_NAME, $response['data']['value']);
300 }
301 }
302 }
303
304 add_action( 'wp_head', array( &$this, 'install_ma_script' ) );
305 }
306
307 /**
308 * Hook admin_init
309 */
310 function admin_init() {
311 add_action( 'admin_action_sib_setting_subscription', array( 'SIB_Page_Form', 'save_setting_subscription' ) );
312 add_action( 'admin_action_nopriv_sib_setting_subscription', array( 'SIB_Page_Form', 'save_setting_subscription' ) );
313 SIB_Manager::LoadTextDomain();
314 $this->register_scripts();
315 $this->register_styles();
316 }
317
318 /**
319 * Hook admin_menu
320 */
321 function admin_menu() {
322 SIB_Manager::LoadTextDomain();
323 new SIB_Page_Home();
324 new SIB_Page_Form();
325 new SIB_Page_Statistics();
326 $home_settings = get_option( SIB_Manager::HOME_OPTION_NAME );
327 if ( isset( $home_settings['activate_ma'] ) && 'yes' == $home_settings['activate_ma'] ) {
328 new SIB_Page_Scenarios();
329 }
330
331 }
332
333 /**
334 * Register script for admin page
335 */
336 function register_scripts() {
337 wp_register_script( 'sib-bootstrap-js', self::$plugin_url . '/js/bootstrap/js/bootstrap.min.js', array( 'jquery' ), null );
338 wp_register_script( 'sib-admin-js', self::$plugin_url . '/js/admin.js', array( 'jquery' ), filemtime( self::$plugin_dir . '/js/admin.js' ) );
339 wp_register_script( 'sib-chosen-js', self::$plugin_url . '/js/chosen.jquery.min.js', array( 'jquery' ), null );
340 wp_enqueue_script('jquery-ui-datepicker');
341 wp_enqueue_script('jquery-ui-spinner');
342 }
343
344 /**
345 * Register stylesheet for admin page
346 */
347 function register_styles() {
348 wp_register_style( 'sib-bootstrap-css', self::$plugin_url . '/js/bootstrap/css/bootstrap.css', array(), null, 'all' );
349 wp_register_style( 'sib-fontawesome-css', self::$plugin_url . '/css/fontawesome/css/font-awesome.css', array(), null, 'all' );
350 wp_register_style( 'sib-chosen-css', self::$plugin_url . '/css/chosen.min.css' );
351 wp_register_style( 'sib-admin-css', self::$plugin_url . '/css/admin.css', array(), filemtime( self::$plugin_dir . '/css/admin.css' ), 'all' );
352 }
353
354 /**
355 * Registers scripts for frontend
356 */
357 function frontend_register_scripts() {
358
359 }
360
361 /**
362 * Enqueue script on front page
363 */
364 function wp_head_ac() {
365 wp_enqueue_script( 'sib-front-js', self::$plugin_url . '/js/mailin-front.js', array( 'jquery' ), filemtime( self::$plugin_dir . '/js/mailin-front.js' ), false );
366 wp_enqueue_style( 'sib-front-css', self::$plugin_url.'/css/mailin-front.css', array(), array(), 'all');
367 wp_localize_script(
368 'sib-front-js', 'sibErrMsg', array(
369 'invalidMail' => __( 'Please fill out valid email address', 'sib_lang' ),
370 'requiredField' => __( 'Please fill out required fields', 'sib_lang' ),
371 'invalidDateFormat' => __( 'Please fill out valid date format', 'sib_lang' ),
372 'invalidSMSFormat' => __( 'Please fill out valid phone number', 'sib_lang' ),
373 )
374 );
375 wp_localize_script(
376 'sib-front-js', 'ajax_sib_front_object',
377 array(
378 'ajax_url' => admin_url( 'admin-ajax.php' ),
379 'ajax_nonce' => wp_create_nonce( 'sib_front_ajax_nonce' ),
380 'flag_url' => plugins_url('img/flags/', __FILE__ ),
381 )
382 );
383 }
384
385 /**
386 * Install method is called once install this plugin.
387 * create tables, default option ...
388 */
389 static function install() {
390 $general_settings = get_option( self::MAIN_OPTION_NAME, array() );
391 $access_key = isset( $general_settings['access_key'] ) ? $general_settings['access_key'] : '';
392 if ( '' === $access_key ) {
393 // Default option when activate.
394 $home_settings = array(
395 'activate_email' => 'no',
396 'activate_ma' => 'no',
397 );
398 update_option( self::HOME_OPTION_NAME, $home_settings );
399 }
400 }
401
402 /**
403 * Uninstall method is called once uninstall this plugin
404 * delete tables, options that used in plugin
405 */
406 static function uninstall() {
407 $setting = array();
408 update_option( SIB_Manager::MAIN_OPTION_NAME, $setting );
409
410 $home_settings = array(
411 'activate_email' => 'no',
412 'activate_ma' => 'no',
413 );
414 update_option( SIB_Manager::HOME_OPTION_NAME, $home_settings );
415
416 // Delete access_token.
417 $token_settings = array();
418 update_option( SIB_Manager::ACCESS_TOKEN_OPTION_NAME, $token_settings );
419 delete_option(SIB_Manager::API_KEY_V3_OPTION_NAME);
420 // Empty tables.
421 SIB_Model_Users::removeTable();
422 SIB_Forms::removeTable();
423 SIB_Forms_Lang::removeTable();
424
425 // Remove all transient.
426 SIB_API_Manager::remove_transients();
427 }
428
429 /**
430 * Deactivate method is called once deactivate this plugin
431 */
432 static function deactivate() {
433 update_option( SIB_Manager::LANGUAGE_OPTION_NAME, false );
434 // Remove sync users option.
435 delete_option( 'sib_sync_users' );
436 // Remove all transient.
437 SIB_API_Manager::remove_transients();
438 }
439
440 /**
441 * Check if plugin is logged in.
442 *
443 * @param bool $redirect
444 * @return bool
445 */
446 static function is_done_validation($redirect = true) {
447 if (self::is_api_key_set()) {
448 $apiClient = new SendinblueApiClient();
449 $apiClient->getAccount();
450 if ( SendinblueApiClient::RESPONSE_CODE_OK === $apiClient->getLastResponseCode() ) {
451 return true;
452 }
453 delete_option(SIB_Manager::API_KEY_V3_OPTION_NAME);
454 }
455
456 if ($redirect) {
457 self::redirect_to_sib_plugin_homepage();
458 }
459
460 return false;
461 }
462
463 static function redirect_to_sib_plugin_homepage() {
464 wp_safe_redirect(add_query_arg('page', SIB_Page_Home::PAGE_ID, admin_url('admin.php')));
465 }
466
467 /**
468 * @return bool
469 */
470 static function is_api_key_set() {
471 $api_key = get_option(SIB_Manager::API_KEY_V3_OPTION_NAME);
472 return !empty($api_key);
473 }
474
475 /**
476 * Install marketing automation script in header
477 */
478 function install_ma_script() {
479 $home_settings = get_option( SIB_Manager::HOME_OPTION_NAME, array() );
480 if ( isset( $home_settings['activate_ma'] ) && 'yes' == $home_settings['activate_ma'] ) {
481 $general_settings = get_option( SIB_Manager::MAIN_OPTION_NAME, array() );
482 $ma_email = '';
483 $current_user = wp_get_current_user();
484 if ( $current_user instanceof WP_User ) {
485 $ma_email = $current_user->user_email;
486 }
487 $ma_key = $general_settings['ma_key'];
488 $output = '<script type="text/javascript">
489 (function() {window.sib ={equeue:[],client_key:"'. $ma_key .'"};/* OPTIONAL: email for identify request*/
490 window.sib.email_id = "'. $ma_email .'";
491 window.sendinblue = {}; for (var j = [\'track\', \'identify\', \'trackLink\', \'page\'], i = 0; i < j.length; i++) { (function(k) { window.sendinblue[k] = function() { var arg = Array.prototype.slice.call(arguments); (window.sib[k] || function() { var t = {}; t[k] = arg; window.sib.equeue.push(t);})(arg[0], arg[1], arg[2]);};})(j[i]);}var n = document.createElement("script"),i = document.getElementsByTagName("script")[0]; n.type = "text/javascript", n.id = "sendinblue-js", n.async = !0, n.src = "https://sibautomation.com/sa.js?key=" + window.sib.client_key, i.parentNode.insertBefore(n, i), window.sendinblue.page();})();
492 </script>';
493 echo $output;
494 }
495 }
496
497 /**
498 * Register widget
499 */
500 function sib_create_widget() {
501 register_widget( 'SIB_Widget_Subscribe' );
502 }
503
504 /**
505 * Display form on front page
506 *
507 * @param string $frmID - form ID.
508 * @param string $lang - form language.
509 */
510 function generate_form_box( $frmID = '-1', $lang = '' ) {
511 if ( 'oldForm' == $frmID ) {
512 $frmID = get_option( 'sib_old_form_id' );
513 } elseif ( '' != $lang ) {
514 $trans_id = SIB_Forms_Lang::get_form_ID( $frmID, $lang );
515 if ( null != $trans_id ) {
516 $frmID = $trans_id;
517 }
518 }
519
520 $formData = SIB_Forms::getForm( $frmID );
521
522 if ( empty( $formData ) ) {
523 return;
524 }
525 // Add Google recaptcha
526 if( '0' != $formData['gCaptcha'] ) {
527 if( '1' == $formData['gCaptcha'] ) { // For old forms.
528 $formData['html'] = preg_replace( '/([\s\S]*?)<div class="g-recaptcha"[\s\S]*?data-size="invisible"><\/div>/', '$1', $formData['html'] );
529 }
530 if ( '3' == $formData['gCaptcha'] ) // The case of using google recaptcha.
531 {
532 ?>
533 <script type="text/javascript" charset="utf-8">
534 var gCaptchaSibWidget;
535 var onloadSibCallback = function() {
536 var recaptchas = document.querySelectorAll('div[id=sib_captcha]');
537 for( i = 0; i < recaptchas.length; i++) {
538 gCaptchaSibWidget = grecaptcha.render(recaptchas[i], {
539 'sitekey' : '<?php echo $formData["gCaptcha_site"] ?>'
540 });
541 }
542 }
543 </script>
544 <?php
545 }
546 else { // The case of using google invisible recaptcha.
547 ?>
548 <script type="text/javascript">
549 var gCaptchaSibWidget;
550 var onloadSibCallback = function() {
551 var element = document.getElementsByClassName('sib-default-btn');
552 gCaptchaSibWidget = grecaptcha.render(element[0],{
553 'sitekey' : '<?php echo $formData["gCaptcha_site"] ?>',
554 'callback' : sibVerifyCallback
555 });
556 };
557 </script>
558 <?php
559 }
560 ?>
561 <script src="https://www.google.com/recaptcha/api.js?onload=onloadSibCallback&render=explicit" async defer></script>
562 <?php
563 }
564
565 ?>
566 <form id="sib_signup_form_<?php echo esc_attr( $frmID ); ?>" method="post" class="sib_signup_form">
567 <div class="sib_loader" style="display:none;"><img
568 src="<?php echo esc_url( includes_url() ); ?>/images/spinner.gif" alt="loader"></div>
569 <input type="hidden" name="sib_form_action" value="subscribe_form_submit">
570 <input type="hidden" name="sib_form_id" value="<?php echo esc_attr( $frmID ); ?>">
571 <input type="hidden" name="sib_form_alert_notice" value="<?php echo esc_attr($formData['requiredMsg']); ?>">
572 <input type="hidden" name="sib_security" value="<?php echo esc_attr( wp_create_nonce( 'sib_front_ajax_nonce' ) ); ?>">
573 <div class="sib_signup_box_inside_<?php echo esc_attr( $frmID ); ?>">
574 <div style="/*display:none*/" class="sib_msg_disp">
575 </div>
576 <?php
577 echo stripcslashes($formData['html']);
578 ?>
579 </div>
580 </form>
581 <style>
582 <?php
583
584 if ( ! $formData['dependTheme'] ) {
585 // Custom css.
586 $formData['css'] = str_replace( '[form]', 'form#sib_signup_form_' . $frmID, $formData['css'] );
587 echo $formData['css'];
588 }
589 $msgCss = str_replace( '[form]', 'form#sib_signup_form_' . $frmID, SIB_Forms::getDefaultMessageCss() );
590 echo $msgCss;
591 ?>
592 </style>
593 <?php
594 }
595
596 /**
597 * Shortcode for sign up form
598 *
599 * @param array $atts - shortcode parameter.
600 * @return string
601 */
602 function sibwp_form_shortcode( $atts ) {
603 $pull_atts = shortcode_atts(
604 array(
605 'id' => 'oldForm', // We will return 'oldForm' for shortcode of old form.
606 ), $atts
607 );
608 $frmID = $pull_atts['id'];
609 $lang = defined( 'ICL_LANGUAGE_CODE' ) ? ICL_LANGUAGE_CODE : '';
610
611 ob_start();
612 $this->generate_form_box( $frmID, $lang );
613
614 $output_string = ob_get_contents();
615 ob_end_clean();
616 return $output_string;
617 }
618
619 /**
620 * Sign up process
621 */
622 function signup_process() {
623 if ( empty( $_POST['sib_security'] ) ) {
624 wp_send_json(
625 array(
626 'status' => 'sib_security',
627 'msg' => 'Token not found.',
628 )
629 );
630 }
631 $formID = isset( $_POST['sib_form_id'] ) ? sanitize_text_field( $_POST['sib_form_id'] ) : 1;
632 if ( 'oldForm' == $formID ) {
633 $formID = get_option( 'sib_old_form_id' );
634 }
635 $formData = SIB_Forms::getForm( $formID );
636
637 if (!SIB_Manager::is_done_validation(false) || 0 == count($formData)) {
638 wp_send_json(
639 array(
640 'status' => 'failure',
641 'msg' => array("errorMsg" => "Something wrong occurred"),
642 )
643 );
644 }
645
646 if ( '0' != $formData['gCaptcha'] ) {
647 if ( ! isset( $_POST['g-recaptcha-response'] ) || empty( $_POST['g-recaptcha-response'] ) ) {
648 wp_send_json(
649 array(
650 'status' => 'gcaptchaEmpty',
651 'msg' => 'Please click on the reCAPTCHA box.',
652 )
653 );
654 }
655 $secret = $formData['gCaptcha_secret'];
656
657 $data = array(
658 'secret' => $secret,
659 'response' => sanitize_text_field( $_POST['g-recaptcha-response'] ),
660 );
661
662 $args = [
663 'method' => 'POST',
664 ];
665
666 try {
667 $data = wp_remote_retrieve_body(wp_remote_request(sprintf(self::RECAPTCHA_API_TEMPLATE, http_build_query($data)), $args));
668 $responseData = json_decode($data);
669 if ( ! $responseData->success ) {
670 wp_send_json(
671 array(
672 'status' => 'gcaptchaFail',
673 'msg' => 'Robot verification failed, please try again.',
674 )
675 );
676 }
677 } catch (Exception $exception) {
678 wp_send_json(
679 array(
680 'status' => 'gcaptchaFail',
681 'msg' => $exception->getMessage(),
682 )
683 );
684 }
685 }
686
687 $listID = $formData['listID'];
688 if (empty($listID)) {
689 $listID = array();
690 }
691 $interestingLists = isset( $_POST['interestingLists']) ? array_map( 'esc_attr', $_POST['interestingLists'] ) : array();
692 $expectedLists = isset( $_POST['listIDs'] ) ? array_map( 'esc_attr', $_POST['listIDs'] ) : array();
693 if ( empty($interestingLists) )
694 {
695 $unlinkedLists = [];
696 }
697 else{
698 $unwantedLists = array_diff( $interestingLists, $expectedLists );
699 $unlinkedLists = array_diff( $unwantedLists, $listID);
700 $listID = array_unique(array_merge( $listID, $expectedLists ));
701 }
702
703 $email = isset( $_POST['email'] ) ? sanitize_email( $_POST['email'] ) : '';
704 if ( ! is_email( $email ) ) {
705 return;
706 }
707
708 $isDoubleOptin = $formData['isDopt'];
709 $isOptin = $formData['isOpt'];
710 $redirectUrlInEmail = $formData['redirectInEmail'];
711 $redirectUrlInForm = $formData['redirectInForm'];
712
713 $info = array();
714 $attributes = explode( ',', $formData['attributes'] ); // String to array.
715 if ( isset( $attributes ) && is_array( $attributes ) ) {
716 foreach ( $attributes as $attribute ) {
717 $info[ $attribute ] = isset( $_POST[ $attribute ] ) ? sanitize_text_field( $_POST[ $attribute ] ) : '' ;
718 }
719 }
720 $templateID = $formData['templateID'];
721
722 if ( $isDoubleOptin ) {
723 /*
724 * Double optin process
725 * 1. add/update user in SIB contacts
726 * 2. add record to db
727 * 3. send confirmation email with activate code
728 */
729 // Create/updated subscriber.
730 $result = SIB_API_Manager::create_subscriber( 'double-optin', $email, $listID, $info, $unlinkedLists );
731 // Send a double optin confirm email.
732 if ( 'success' == $result ) {
733 // Add a recode with activate code in db.
734 $activateCode = $this->create_activate_code( $email, $info, $formID, $listID, $redirectUrlInEmail, $unlinkedLists );
735 SIB_API_Manager::send_comfirm_email( 'double-optin', $email, $templateID, $info, $activateCode );
736 }
737 } elseif ( $isOptin ) {
738 $result = SIB_API_Manager::create_subscriber( 'confirm', $email, $listID, $info, $unlinkedLists );
739 if ( 'success' == $result ) {
740 // Send a confirm email.
741 SIB_API_Manager::send_comfirm_email( 'confirm', $email, $templateID, $info );
742 }
743 } else {
744 $result = SIB_API_Manager::create_subscriber( 'simple', $email, $listID, $info, $unlinkedLists );
745 }
746 $msg = array(
747 'successMsg' => $formData['successMsg'],
748 'errorMsg' => $formData['errorMsg'],
749 'existMsg' => $formData['existMsg'],
750 'invalidMsg' => $formData['invalidMsg'],
751 );
752
753 wp_send_json(
754 array(
755 'status' => $result,
756 'msg' => $msg,
757 'redirect' => $redirectUrlInForm,
758 )
759 );
760 }
761
762 /**
763 * Create activate code for Double optin
764 *
765 * @param string $email - user email.
766 * @param array $info - info.
767 * @param string $formID - form ID.
768 * @param array $listIDs - lists.
769 * @param string $redirectUrl - redirect url.
770 * @return string - activate code.
771 */
772 function create_activate_code( $email, $info, $formID, $listIDs, $redirectUrl, $unlinkedLists = null ) {
773 $data = SIB_Model_Users::get_data_by_email( $email, $formID );
774 if ( $unlinkedLists != null )
775 {
776 $info['unlinkedLists'] = $unlinkedLists;
777 }
778 if ( false == $data ) {
779 $uniqid = uniqid();
780 $data = array(
781 'email' => $email,
782 'code' => $uniqid,
783 'info' => maybe_serialize( $info ),
784 'frmid' => $formID,
785 'listIDs' => maybe_serialize( $listIDs ),
786 'redirectUrl' => $redirectUrl,
787 );
788 SIB_Model_Users::add_record( $data );
789 } else {
790 $uniqid = $data['code'];
791 }
792 return $uniqid;
793 }
794
795 /**
796 * Use Sendinblue SMTP to send all emails
797 *
798 * @param string $to - reception email.
799 * @param string $subject - subject of email.
800 * @param string $message - message of email.
801 * @param string $headers - header of email.
802 * @param array $attachments - attachments.
803 */
804 static function wp_mail_native( $to, $subject, $message, $headers = '', $attachments = array() ) {
805 $result = require self::$plugin_dir . '/inc/function.wp_mail.php';
806 return $result;
807 }
808
809 /**
810 * To send the transactional email via Sendinblue
811 * hook wp_mail
812 *
813 * @param string $to - reception email.
814 * @param string $subject - subject of email.
815 * @param string $message - message of email.
816 * @param string $headers - header of email.
817 * @param array $attachments - attachments
818 * @param array $tags - tag.
819 * @param string $from_name - sender name.
820 * @param string $from_email - sender email.
821 * @return mixed|WP_Error
822 */
823 static function sib_email( $to, $subject, $message, $headers = '', $attachments = array(), $tags = array(), $from_name = '', $from_email = '' ) {
824 $data = [];
825 // Compact the input, apply the filters, and extract them back out.
826 extract( apply_filters( 'wp_mail', compact( 'to', 'subject', 'message', 'headers', 'attachments' ) ) );
827
828 if ( ! is_array( $attachments ) ) {
829 $attachments = explode( "\n", str_replace( "\r\n", "\n", $attachments ) );
830 }
831
832 // From email and name.
833 $home_settings = get_option( SIB_Manager::HOME_OPTION_NAME );
834 if ( isset( $home_settings['sender'] ) ) {
835 $from_name = $home_settings['from_name'];
836 $from_email = $home_settings['from_email'];
837 } else {
838 $from_email = trim( get_bloginfo( 'admin_email' ) );
839 $from_name = trim( get_bloginfo( 'name' ) );
840 }
841 $from_email = apply_filters( 'wp_mail_from', $from_email );
842 $from_name = apply_filters( 'wp_mail_from_name', $from_name );
843
844 if ( !empty( $headers ) ) {
845 $data['headers'] = $headers;
846 if ( ! is_array( $headers ) ) {
847 // Explode the headers out, so this function can take both.
848 // string headers and an array of headers.
849 $tempheaders = explode( "\n", str_replace( "\r\n", "\n", $headers ) );
850 } else {
851 $tempheaders = $headers;
852 }
853 $headers = array();
854 $bcc = array();
855 // If it's actually got contents.
856 if ( ! empty( $tempheaders ) ) {
857 // Iterate through the raw headers.
858 foreach ( (array) $tempheaders as $header ) {
859 if ( strpos( $header, ':' ) === false ) {
860 if ( false !== stripos( $header, 'boundary=' ) ) {
861 $parts = preg_split( '/boundary=/i', trim( $header ) );
862 $boundary = trim( str_replace( array( "'", '"' ), '', $parts[1] ) );
863 }
864 continue;
865 }
866 // Explode them out.
867 list($name, $content) = explode( ':', trim( $header ), 2 );
868
869 // Cleanup crew.
870 $name = trim( $name );
871 $content = trim( $content );
872
873 switch ( strtolower( $name ) ) {
874 case 'content-type':
875 $headers[ trim( $name ) ] = trim( $content );
876 break;
877 case 'x-mailin-tag':
878 $headers[ trim( $name ) ] = trim( $content );
879 break;
880 case 'from':
881 if ( strpos( $content, '<' ) !== false ) {
882 // So... making my life hard again?
883 $from_name = substr( $content, 0, strpos( $content, '<' ) - 1 );
884 $from_name = str_replace( '"', '', $from_name );
885 $from_name = trim( $from_name );
886
887 $from_email = substr( $content, strpos( $content, '<' ) + 1 );
888 $from_email = str_replace( '>', '', $from_email );
889 $from_email = trim( $from_email );
890 } else {
891 $from_name = '';
892 $from_email = trim( $content );
893 }
894 break;
895
896 case 'bcc':
897 if ( strpos( $content, '<') !== false )
898 {
899 $bcc_content = substr( $content, strpos( $content, '<' ) + 1 );
900 $bcc_content = str_replace( '>', '', $bcc_content );
901 $bcc[ trim( $bcc_content ) ] = '';
902 } else {
903
904 if (!empty(trim( $content ))) {
905 $data['bcc'] = [
906 ['email' => trim( $content )]
907 ];
908 }
909 }
910 break;
911 case 'cc':
912 if ( strpos( $content, '<') !== false )
913 {
914 $cc_content = substr( $content, strpos( $content, '<' ) + 1 );
915 $cc_content = str_replace( '>', '', $cc_content );
916 if (!empty(trim( $cc_content ))) {
917 $data['cc'] = ['email' => trim( $cc_content )];
918 }
919 }
920 break;
921 case 'reply-to':
922 if ( strpos( $content, '<') !== false )
923 {
924 $reply_content = substr( $content, strpos( $content, '<' ) + 1 );
925 $reply_content = str_replace( '>', '', $reply_content );
926 $reply = trim( $reply_content );
927 } else {
928 $reply = trim( $content );
929 }
930
931 if (!empty($reply)) {
932 $data['replyTo'] = ['email' => trim( $reply )];
933 }
934 break;
935 default:
936 break;
937 }
938 }
939 }
940 }
941
942 // Set destination addresses.
943 if ( ! is_array( $to ) ) {
944 $to = explode( ',', preg_replace( '/\s+/', '', $to ) ); // strip all whitespace.
945 }
946
947 $processed_to = array();
948 foreach ( $to as $email ) {
949 if ( is_array( $email ) ) {
950 $processed_to[] = $email;
951 } else {
952 $processed_to[] = ['email' => $email];
953 }
954 }
955 $data['to'] = $processed_to;
956
957
958 // Attachments.
959 $attachment_content = array();
960 if ( ! empty( $attachments ) ) {
961 foreach ( $attachments as $attachment ) {
962 $content = self::getAttachmentStruct( $attachment );
963 if ( ! is_wp_error( $content ) ) {
964 $attachment_content = array_merge( $attachment_content, $content );
965 }
966 }
967 $data['attachment'] = $attachment_content;
968 }
969
970 // Common transformations for the HTML part.
971 // If it is text/plain, New line break found.
972 if ( strpos( $message, '</table>' ) === false && strpos( $message, '</div>' ) === false ) {
973 if ( strpos( $message, "\n" ) !== false ) {
974 if ( is_array( $message ) ) {
975 foreach ( $message as &$value ) {
976 $value['content'] = preg_replace( '#<(https?://[^*]+)>#', '$1', $value['content'] );
977 $value['content'] = nl2br( $value['content'] );
978 }
979 } else {
980 $message = preg_replace( '#<(https?://[^*]+)>#', '$1', $message );
981 $message = nl2br( $message );
982 }
983 }
984 }
985 // Sending...
986 $data['sender'] = ['email' => $from_email, 'name' => $from_name ];
987 $data['subject'] = $subject;
988 $data['htmlContent'] = $message;
989
990 try {
991 $sent = SIB_API_Manager::send_email( $data );
992 return $sent;
993 } catch ( Exception $e ) {
994 return new WP_Error( $e->getMessage() );
995 }
996 }
997
998 /**
999 * @param string $path - attachment file path
1000 * @return array|WP_Error
1001 */
1002 static function getAttachmentStruct( $path ) {
1003
1004 $struct = array();
1005
1006 try {
1007
1008 if ( ! @is_file( $path ) ) {
1009 throw new Exception( $path . ' is not a valid file.' );
1010 }
1011
1012 $filename = basename( $path );
1013
1014 if ( ! function_exists( 'get_magic_quotes' ) ) {
1015 /**
1016 * @return bool
1017 */
1018 function get_magic_quotes() {
1019 return false;
1020 }
1021 }
1022 if ( ! function_exists( 'set_magic_quotes' ) ) {
1023 /**
1024 * @param $value
1025 * @return bool
1026 */
1027 function set_magic_quotes( $value ) {
1028 return true;
1029 }
1030 }
1031
1032 $isMagicQuotesSupported = version_compare( PHP_VERSION, '5.3.0', '<' )
1033 && function_exists( 'get_magic_quotes_runtime' )
1034 && function_exists( 'set_magic_quotes_runtime' );
1035
1036 if ( $isMagicQuotesSupported ) {
1037 // Escape linters check.
1038 $getMagicQuotesRuntimeFunc = 'get_magic_quotes_runtime';
1039 $setMagicQuotesRuntimeFunc = 'set_magic_quotes_runtime';
1040
1041 // Save magic quotes value.
1042 $magicQuotes = $getMagicQuotesRuntimeFunc();
1043 $setMagicQuotesRuntimeFunc (0);
1044 }
1045
1046 $file_buffer = file_get_contents( $path );
1047 $file_buffer = chunk_split( base64_encode( $file_buffer ), 76, "\n" );
1048
1049 if ( $isMagicQuotesSupported ) {
1050 // Restore magic quotes value.
1051 $setMagicQuotesRuntimeFunc($magicQuotes);
1052 }
1053
1054 $struct[ $filename ] = $file_buffer;
1055
1056 } catch ( Exception $e ) {
1057 return new WP_Error( 'Error creating the attachment structure: ' . $e->getMessage() );
1058 }
1059
1060 return $struct;
1061 }
1062
1063 /**
1064 * Create custom page for form preview
1065 *
1066 * @param array $query_vars - query.
1067 * @return array
1068 */
1069 function sib_query_vars( $query_vars ) {
1070 $query_vars[] = 'sib_form';
1071 return $query_vars;
1072 }
1073
1074 /**
1075 * Parse request
1076 *
1077 * @param mixed $wp - object.
1078 */
1079 function sib_parse_request( &$wp ) {
1080 if ( array_key_exists( 'sib_form', $wp->query_vars ) ) {
1081 include 'inc/sib-form-preview.php';
1082 exit();
1083 }
1084 }
1085
1086 /**
1087 * Load Text domain.
1088 */
1089 static function LoadTextDomain() {
1090 // Load lang file.
1091 $i18n_file_name = 'sib_lang';
1092 $locale = apply_filters( 'plugin_locale', get_locale(), $i18n_file_name );
1093 // $locale = 'fr_FR';
1094 $filename = plugin_dir_path( __FILE__ ) . '/lang/' . $i18n_file_name . '-' . $locale . '.mo';
1095 load_textdomain( 'sib_lang', $filename );
1096 }
1097
1098 /**
1099 * Notice the language is difference than site's language
1100 */
1101 static function language_admin_notice() {
1102 if ( ! get_option( SIB_Manager::LANGUAGE_OPTION_NAME ) ) {
1103 $lang_prefix = substr( get_bloginfo( 'language' ), 0, 2 );
1104 $lang = self::getLanguageName( $lang_prefix );
1105 $class = 'error';
1106 $message = sprintf( 'Please note that your Sendinblue account is in %s, but Sendinblue WordPress plugin is only available in English / French for now. Sorry for inconvenience.', $lang );
1107 if ( 'en' !== $lang_prefix && 'fr' !== $lang_prefix ) {
1108 echo ( "<div class=\"$class\" style='margin-left: 2px;margin-bottom: 4px;'> <p>$message<a class='' href='?dismiss_admin_lang_notice=1'> No problem...</a></p></div>" );
1109 }
1110 }
1111 }
1112
1113 /**
1114 * Notice wp_mail is not possible
1115 */
1116 static function wpMailNotices() {
1117 if ( self::$wp_mail_conflict ) {
1118 echo ( '<div class="error"><p>' . __( 'You cannot use Sendinblue SMTP now because wp_mail has been declared by another process or plugin. ', 'sib_lang' ) . '</p></div>' );
1119 }
1120 }
1121
1122 /**
1123 * Names of languages.
1124 *
1125 * @param string $prefix - language.
1126 * @return mixed
1127 */
1128 public static function getLanguageName( $prefix = 'en' ) {
1129 $lang = array();
1130 $lang['de'] = 'Deutsch';
1131 $lang['en'] = 'English';
1132 $lang['zh'] = '中文';
1133 $lang['ru'] = 'Русский';
1134 $lang['fi'] = 'suomi';
1135 $lang['fr'] = 'Français';
1136 $lang['nl'] = 'Nederlands';
1137 $lang['sv'] = 'Svenska';
1138 $lang['it'] = 'Italiano';
1139 $lang['ro'] = 'Română';
1140 $lang['hu'] = 'Magyar';
1141 $lang['ja'] = '日本語';
1142 $lang['es'] = 'Español';
1143 $lang['vi'] = 'Tiếng Việt';
1144 $lang['ar'] = 'العربية';
1145 $lang['pt'] = 'Português';
1146 $lang['pb'] = 'Português do Brasil';
1147 $lang['pl'] = 'Polski';
1148 $lang['gl'] = 'galego';
1149 $lang['tr'] = 'Turkish';
1150 $lang['et'] = 'Eesti';
1151 $lang['hr'] = 'Hrvatski';
1152 $lang['eu'] = 'Euskera';
1153 $lang['el'] = 'Ελληνικά';
1154 $lang['ua'] = 'Українська';
1155 $lang['ko'] = '한국어';
1156
1157 return $lang[ $prefix ];
1158 }
1159
1160 /**
1161 * Create language sidebar for wpml plugin.
1162 */
1163 public function sib_create_language_sidebar() {
1164 $languages = apply_filters( 'wpml_active_languages', array() );
1165 $page = isset( $_GET['page'] ) ? sanitize_text_field( $_GET['page'] ) : '';
1166 $action = isset( $_GET['action'] ) ? sanitize_text_field( $_GET['action'] ) : '';
1167 $frmID = isset( $_GET['id'] ) ? sanitize_text_field( $_GET['id'] ) : '';
1168 $pID = isset( $_GET['pid'] ) ? sanitize_text_field( $_GET['pid'] ) : '';
1169 $parent = true;
1170 if ( '' !== $frmID && '' !== $pID ) {
1171 $lang = SIB_Forms_Lang::get_lang( $frmID, $pID );
1172 $parent = false;
1173 } else {
1174 $lang = ICL_LANGUAGE_CODE;
1175 if ( '' !== $frmID && '' === $pID ) {
1176 $pID = $frmID;
1177
1178 }
1179 }
1180
1181 if ( 'sib_page_form' === $page && 'edit' === $action ) {
1182 ?>
1183 <div class="panel panel-default text-left box-border-box sib-small-content">
1184 <div class="panel-heading"><strong><?php esc_attr_e( 'About Sendinblue', 'sib_lang' ); ?></strong></div>
1185 <div class="panel-body">
1186 <p>
1187 <label for='sib_form_language'><?php esc_attr_e( 'Language of this form:', 'sib_lang' ); ?> </label>
1188 <select id="sib_form_lang" name="sib_form_lang" data-selected="">
1189 <?php
1190 foreach ( $languages as $language ) {
1191 $selected = ($language['code'] == $lang) ? 'selected' : '';
1192 if ( $language['code'] == $lang && true === $parent ) {
1193 $option_text = '<option value="" ' . $selected . '>' . $language['native_name'] . '</option>';
1194 } else {
1195 $exist = SIB_Forms_Lang::get_form_ID( $pID, $language['language_code'] );
1196
1197 if ( null === $exist ) {
1198 continue;
1199 } else {
1200 $option_text = ( 'selected' === $selected ) ? sprintf( '<option value="" selected>%s</option>', $language['native_name'] ) : sprintf( '<option value="?page=%s&action=%s&pid=%s&lang=%s" %s >%s</option>', esc_attr( $_REQUEST['page'] ), 'edit', absint( $pID ), $language['language_code'], $selected, $language['native_name'] );
1201 }
1202 }
1203 echo $option_text ;
1204 }
1205 ?>
1206 </select>
1207 </p>
1208 <div class="sib_form_translate">
1209 <p>
1210 <label><?php esc_attr_e( 'Translate this form', 'sib_lang' ); ?></label>
1211 </p>
1212 <table width="100%" class="sib_form_trans_table" style="border: 1px solid #8cceea;">
1213 <tr>
1214 <?php
1215 foreach ( $languages as $language ) {
1216 if ( $language['code'] == $lang ) {
1217 continue;
1218 }
1219 ?>
1220 <th style="text-align: center;"><img
1221 src="<?php echo esc_url( $language['country_flag_url'] ); ?>"></th>
1222 <?php
1223 }
1224 ?>
1225 </tr>
1226 <tr style="background-color: #EFF8FC;">
1227 <?php
1228 foreach ( $languages as $language ) {
1229 if ( $language['code'] == $lang ) {
1230 continue;
1231 }
1232 if ( '' === $pID ) {
1233 $img_src = plugins_url( 'img/add_translation_disabled.png', __FILE__ );
1234 $td = '<img src="' . $img_src . '" style="margin:2px;">';
1235 } else {
1236 $exist = SIB_Forms_Lang::get_form_ID( $pID, $language['language_code'] );
1237
1238 if ( null === $exist ) {
1239 $img_src = plugins_url( 'img/add_translation.png', __FILE__ );
1240
1241 $href = sprintf( '<a class="sib-form-redirect" href="?page=%s&action=%s&pid=%s&lang=%s" style="width: 20px; text-align: center;padding: 2px 1px;">', esc_attr( $_REQUEST['page'] ), 'edit', absint( $pID ), $language['language_code'] );
1242 $td = $href . '<img src="' . $img_src . '" style="margin:2px;"></a>';
1243 } else {
1244 $img_src = plugins_url( 'img/edit_translation.png', __FILE__ );
1245 $href = sprintf( '<a class="sib-form-redirect" href="?page=%s&action=%s&id=%s&pid=%s&lang=%s" style="width: 20px; text-align: center;padding: 2px 1px;">', esc_attr( $_REQUEST['page'] ), 'edit', absint( $exist ), absint( $pID ), $language['language_code'] );
1246 $td = $href . '<img src="' . $img_src . '" style="margin:2px;"></a>';
1247 }
1248 }
1249 ?>
1250 <td style="text-align: center;"><?php echo $td; ?></td>
1251 <?php
1252 }
1253 ?>
1254 </tr>
1255 </table>
1256 </div>
1257 <?php if ( isset( $_GET['pid'] ) ) { ?>
1258 <div class="sib-form-duplicate">
1259 <button class="btn btn-default sib-duplicate-btn"><?php esc_attr_e( 'Copy content from origin form', 'sib_lang' ); ?></button>
1260 <span class="sib-spin"><i
1261 class="fa fa-circle-o-notch fa-spin fa-lg"></i>&nbsp;&nbsp;</span>
1262 <i title="<?php echo esc_attr_e( 'Copy content from origin form', 'sib_lang' ); ?>"
1263 data-container="body" data-toggle="popover" data-placement="left"
1264 data-content="<?php echo esc_attr_e( 'You can copy contents from origin form. You need to translate the contents by this language.', 'sib_lang' ); ?>"
1265 data-html="true" class="fa fa-question-circle popover-help-form"></i>
1266 </div>
1267 <?php } ?>
1268 </div>
1269 </div>
1270 <?php
1271 }
1272 }
1273
1274 public function ajax_get_country_prefix() {
1275 check_ajax_referer( 'sib_front_ajax_nonce', 'security' );
1276 $sms_manager = new SIB_SMS_Code();
1277 $country_list = $sms_manager->get_sms_code_list();
1278 $country_list_html = '';
1279 foreach ( $country_list as $item => $value ) {
1280 $flg_url = plugins_url( 'img/flags/', __FILE__ ).strtolower($item).'.png';
1281 $item_html = '<li class="sib-country-prefix" data-country-code="'.$item.'" data-dial-code="'.$value["code"].'"><div class="sib-flag-box"><div class="sib-flag '.$item.'" style="background-image: url('.$flg_url.')"></div><span>'.$value['name'].'</span><span class="sib-dial-code">+'.$value['code'].'</span></div></li>';
1282 $country_list_html .= $item_html;
1283 }
1284 wp_send_json($country_list_html);
1285 }
1286 }
1287
1288 add_action( 'sendinblue_init', 'sendinblue_init' );
1289 add_filter( 'widget_text', 'do_shortcode' );
1290
1291 /**
1292 * Plugin entry point Process.
1293 */
1294 function sendinblue_init() {
1295 SIB_Manager::LoadTextDomain();
1296 new SIB_Manager();
1297 }
1298
1299 do_action( 'sendinblue_init' );
1300 }
1301