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