Elementor Essential Addons - Version 5.0.7

Version Description

  • 07/02/2022 =

  • Improved: Data escaping for Security Enhancement

  • Few minor bug fixes & improvements

Download this release

Release Info

Developer wpdevteam
Plugin Icon 128x128 Elementor Essential Addons
Version 5.0.7
Comparing to
See all releases

Code changes from version 5.0.6 to 5.0.7

essential_adons_elementor.php CHANGED
@@ -4,14 +4,14 @@
4
  * Description: The Essential plugin you install after Elementor! Packed with 40+ stunning free elements including Advanced Data Table, Event Calendar, Filterable Gallery, WooCommerce, and many more.
5
  * Plugin URI: https://essential-addons.com/elementor/
6
  * Author: WPDeveloper
7
- * Version: 5.0.6
8
  * Author URI: https://wpdeveloper.com/
9
  * Text Domain: essential-addons-for-elementor-lite
10
  * Domain Path: /languages
11
  *
12
  * WC tested up to: 6.1.1
13
- * Elementor tested up to: 3.5.4
14
- * Elementor Pro tested up to: 3.5.2
15
  */
16
 
17
  if (!defined('ABSPATH')) {
@@ -27,7 +27,7 @@ define('EAEL_PLUGIN_FILE', __FILE__);
27
  define('EAEL_PLUGIN_BASENAME', plugin_basename(__FILE__));
28
  define('EAEL_PLUGIN_PATH', trailingslashit(plugin_dir_path(__FILE__)));
29
  define('EAEL_PLUGIN_URL', trailingslashit(plugins_url('/', __FILE__)));
30
- define('EAEL_PLUGIN_VERSION', '5.0.6');
31
  define('EAEL_ASSET_PATH', wp_upload_dir()['basedir'] . '/essential-addons-elementor');
32
  define('EAEL_ASSET_URL', wp_upload_dir()['baseurl'] . '/essential-addons-elementor');
33
  /**
4
  * Description: The Essential plugin you install after Elementor! Packed with 40+ stunning free elements including Advanced Data Table, Event Calendar, Filterable Gallery, WooCommerce, and many more.
5
  * Plugin URI: https://essential-addons.com/elementor/
6
  * Author: WPDeveloper
7
+ * Version: 5.0.7
8
  * Author URI: https://wpdeveloper.com/
9
  * Text Domain: essential-addons-for-elementor-lite
10
  * Domain Path: /languages
11
  *
12
  * WC tested up to: 6.1.1
13
+ * Elementor tested up to: 3.5.5
14
+ * Elementor Pro tested up to: 3.6.0
15
  */
16
 
17
  if (!defined('ABSPATH')) {
27
  define('EAEL_PLUGIN_BASENAME', plugin_basename(__FILE__));
28
  define('EAEL_PLUGIN_PATH', trailingslashit(plugin_dir_path(__FILE__)));
29
  define('EAEL_PLUGIN_URL', trailingslashit(plugins_url('/', __FILE__)));
30
+ define('EAEL_PLUGIN_VERSION', '5.0.7');
31
  define('EAEL_ASSET_PATH', wp_upload_dir()['basedir'] . '/essential-addons-elementor');
32
  define('EAEL_ASSET_URL', wp_upload_dir()['baseurl'] . '/essential-addons-elementor');
33
  /**
includes/Classes/Plugin_Usage_Tracker.php CHANGED
@@ -619,7 +619,7 @@ if ( ! defined( 'ABSPATH' ) ) {
619
  $output .= "<script type='text/javascript'>jQuery('.wpinsights-". esc_attr( $this->plugin_name ) ."-collect').on('click', function(e) {e.preventDefault();jQuery('.wpinsights-data').slideToggle('fast');});</script>";
620
  $output .= '</div>';
621
 
622
- echo $output;
623
  }
624
  /**
625
  * Set all notice options to customized notice.
@@ -846,7 +846,7 @@ if ( ! defined( 'ABSPATH' ) ) {
846
  // Fade in spinner
847
  $("#wpinsights-goodbye-form-<?php echo $class_plugin_name; ?> .deactivating-spinner").fadeIn();
848
  e.preventDefault();
849
- var checkedInput = $("input[name='wpinsights-<?php echo $class_plugin_name; ?>-goodbye-options']:checked"),
850
  checkedInputVal, details;
851
  if( checkedInput.length > 0 ) {
852
  checkedInputVal = checkedInput.val();
@@ -861,7 +861,7 @@ if ( ! defined( 'ABSPATH' ) ) {
861
  }
862
 
863
  var data = {
864
- 'action': 'deactivation_form_<?php echo $class_plugin_name; ?>',
865
  'values': checkedInputVal,
866
  'details': details,
867
  'security': "<?php echo wp_create_nonce ( 'wpins_deactivation_nonce' ); ?>",
@@ -885,7 +885,7 @@ if ( ! defined( 'ABSPATH' ) ) {
885
  // If we click outside the form, the form will close
886
  $('.wpinsights-goodbye-form-bg').on('click',function(){
887
  $("#wpinsights-goodbye-form").fadeOut();
888
- $('body').removeClass('wpinsights-form-active-<?php echo $class_plugin_name; ?>');
889
  });
890
  });
891
  });
619
  $output .= "<script type='text/javascript'>jQuery('.wpinsights-". esc_attr( $this->plugin_name ) ."-collect').on('click', function(e) {e.preventDefault();jQuery('.wpinsights-data').slideToggle('fast');});</script>";
620
  $output .= '</div>';
621
 
622
+ printf( '%1$s', $output );
623
  }
624
  /**
625
  * Set all notice options to customized notice.
846
  // Fade in spinner
847
  $("#wpinsights-goodbye-form-<?php echo $class_plugin_name; ?> .deactivating-spinner").fadeIn();
848
  e.preventDefault();
849
+ var checkedInput = $("input[name='wpinsights-<?php echo esc_attr( $class_plugin_name ); ?>-goodbye-options']:checked"),
850
  checkedInputVal, details;
851
  if( checkedInput.length > 0 ) {
852
  checkedInputVal = checkedInput.val();
861
  }
862
 
863
  var data = {
864
+ 'action': 'deactivation_form_<?php echo esc_attr( $class_plugin_name ); ?>',
865
  'values': checkedInputVal,
866
  'details': details,
867
  'security': "<?php echo wp_create_nonce ( 'wpins_deactivation_nonce' ); ?>",
885
  // If we click outside the form, the form will close
886
  $('.wpinsights-goodbye-form-bg').on('click',function(){
887
  $("#wpinsights-goodbye-form").fadeOut();
888
+ $('body').removeClass('wpinsights-form-active-<?php echo esc_attr( $class_plugin_name ); ?>');
889
  });
890
  });
891
  });
includes/Classes/WPDeveloper_Notice.php CHANGED
@@ -456,7 +456,8 @@ class WPDeveloper_Notice {
456
  $output .= '<img src="'. esc_url( $this->data['thumbnail'][ $msg_for ] ) .'" alt="">';
457
  $output .= '</div>';
458
  }
459
- echo $output;
 
460
  }
461
  /**
462
  * Has Thumbnail Check
@@ -598,7 +599,8 @@ class WPDeveloper_Notice {
598
  }
599
  }
600
  $output .= '</ul>';
601
- echo $output;
 
602
  endif;
603
  }
604
  /**
456
  $output .= '<img src="'. esc_url( $this->data['thumbnail'][ $msg_for ] ) .'" alt="">';
457
  $output .= '</div>';
458
  }
459
+ echo wp_kses_post( $output );
460
+
461
  }
462
  /**
463
  * Has Thumbnail Check
599
  }
600
  }
601
  $output .= '</ul>';
602
+
603
+ printf( '%1$s', $output );
604
  endif;
605
  }
606
  /**
includes/Classes/WPDeveloper_Setup_Wizard.php CHANGED
@@ -254,7 +254,7 @@ class WPDeveloper_Setup_Wizard {
254
  <input data-preferences="<?php echo esc_attr( $preferences ); ?>" type="checkbox"
255
  class="eael-element" id="<?php echo esc_attr( $element[ 'key' ] ); ?>"
256
  name="eael_element[<?php echo esc_attr( $element[ 'key' ] ); ?>]"
257
- <?php echo $checked; ?> >
258
  <span class="eael-quick-setup-toggler-icons"></span>
259
  </label>
260
  </div>
254
  <input data-preferences="<?php echo esc_attr( $preferences ); ?>" type="checkbox"
255
  class="eael-element" id="<?php echo esc_attr( $element[ 'key' ] ); ?>"
256
  name="eael_element[<?php echo esc_attr( $element[ 'key' ] ); ?>]"
257
+ <?php echo esc_attr( $checked ); ?> >
258
  <span class="eael-quick-setup-toggler-icons"></span>
259
  </label>
260
  </div>
includes/Traits/Elements.php CHANGED
@@ -530,8 +530,7 @@ trait Elements
530
  }
531
  }
532
  }
533
-
534
- echo $html;
535
  }
536
 
537
  /**
530
  }
531
  }
532
  }
533
+ printf( '%1$s', $html );
 
534
  }
535
 
536
  /**
includes/Traits/Facebook_Feed.php CHANGED
@@ -2,247 +2,248 @@
2
 
3
  namespace Essential_Addons_Elementor\Traits;
4
 
5
- if (!defined('ABSPATH')) {
6
- exit;
7
  } // Exit if accessed directly
8
  use \Essential_Addons_Elementor\Classes\Helper as HelperClass;
9
 
10
- trait Facebook_Feed
11
- {
12
- /**
13
- * Facebook Feed
14
- *
15
- * @param array $settings optional widget's settings
16
- * @return false|string|void
17
- * @since 3.4.0
18
- */
19
- public function facebook_feed_render_items($settings = [])
20
- {
21
- // check if ajax request
22
- if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'facebook_feed_load_more') {
23
- $ajax = wp_doing_ajax();
24
- // check ajax referer
25
- check_ajax_referer('essential-addons-elementor', 'security');
26
-
27
- // init vars
28
- $page = isset($_POST['page']) ? intval($_REQUEST['page'], 10) : 0;
29
- if (!empty($_POST['post_id'])) {
30
- $post_id = intval($_POST['post_id'], 10);
31
- } else {
32
- $err_msg = __('Post ID is missing', 'essential-addons-for-elementor-lite');
33
- if ($ajax) {
34
- wp_send_json_error($err_msg);
35
- }
36
- return false;
37
- }
38
- if (!empty($_POST['widget_id'])) {
39
- $widget_id = sanitize_text_field($_POST['widget_id']);
40
- } else {
41
- $err_msg = __('Widget ID is missing', 'essential-addons-for-elementor-lite');
42
- if ($ajax) {
43
- wp_send_json_error($err_msg);
44
- }
45
- return false;
46
- }
47
- $settings = HelperClass::eael_get_widget_settings($post_id, $widget_id);
48
-
49
- } else {
50
- // init vars
51
- $page = 0;
52
- $settings = !empty($settings) ? $settings : $this->get_settings_for_display();
53
- }
54
-
55
- $html = '';
56
- $page_id = $settings['eael_facebook_feed_page_id'];
57
- $token = $settings['eael_facebook_feed_access_token'];
58
-
59
- if (empty($page_id) || empty($token)) {
60
- return;
61
- }
62
-
63
- $key = 'eael_facebook_feed_' . md5( str_rot13( str_replace( '.', '', $page_id . $token ) ).$settings['eael_facebook_feed_cache_limit'] );
64
- $facebook_data = get_transient($key);
65
- if ($facebook_data == false) {
66
- $facebook_data = wp_remote_retrieve_body(wp_remote_get("https://graph.facebook.com/v8.0/{$page_id}/posts?fields=status_type,created_time,from,message,story,full_picture,permalink_url,attachments.limit(1){type,media_type,title,description,unshimmed_url},comments.summary(total_count),reactions.summary(total_count)&limit=99&access_token={$token}", [
67
- 'timeout' => 70,
68
- ]));
69
- $facebook_data = json_decode($facebook_data, true);
70
- if(isset($facebook_data['data'])){
71
- set_transient($key, $facebook_data, ($settings['eael_facebook_feed_cache_limit'] * MINUTE_IN_SECONDS));
72
- }
73
- }
74
-
75
- if (!isset($facebook_data['data'])) {
76
- return;
77
- }
78
- $facebook_data = $facebook_data['data'];
79
-
80
- switch ($settings['eael_facebook_feed_sort_by']) {
81
- case 'least-recent':
82
- $facebook_data = array_reverse($facebook_data);
83
- break;
84
- }
85
- $items = array_splice($facebook_data, ($page * $settings['eael_facebook_feed_image_count']['size']), $settings['eael_facebook_feed_image_count']['size']);
86
- foreach ($items as $item) {
87
- $t = 'eael_facebook_feed_message_max_length'; // short it
88
- $limit = isset($settings[$t]) && isset($settings[$t]['size']) ? $settings[$t]['size']: null;
89
- $message = wp_trim_words((isset($item['message']) ? $item['message'] : (isset($item['story']) ? $item['story'] : '')), $limit, '...');
90
- $photo = (isset($item['full_picture']) ? esc_url($item['full_picture']) : '');
91
- $likes = (isset($item['reactions']) ? $item['reactions']['summary']['total_count'] : 0);
92
- $comments = (isset($item['comments']) ? $item['comments']['summary']['total_count'] : 0);
93
-
94
- if ($settings['eael_facebook_feed_layout'] == 'card') {
95
- $html .= '<div class="eael-facebook-feed-item">
 
96
  <div class="eael-facebook-feed-item-inner">
97
  <header class="eael-facebook-feed-item-header clearfix">
98
  <div class="eael-facebook-feed-item-user clearfix">
99
- <a href="https://www.facebook.com/' . $page_id . '" target="' . ($settings['eael_facebook_feed_link_target'] == 'yes' ? '_blank' : '_self') . '"><img src="https://graph.facebook.com/v4.0/' . $page_id . '/picture" alt="' . esc_attr( $item['from']['name'] ) . '" class="eael-facebook-feed-avatar"></a>
100
- <a href="https://www.facebook.com/' . $page_id . '" target="' . ($settings['eael_facebook_feed_link_target'] == 'yes' ? '_blank' : '_self') . '"><p class="eael-facebook-feed-username">' . esc_html( $item['from']['name'] ) . '</p></a>
101
  </div>';
102
 
103
- if ($settings['eael_facebook_feed_date']) {
104
- $html .= '<a href="' . esc_url( $item['permalink_url'] ) . '" target="' . ($settings['eael_facebook_feed_link_target'] ? '_blank' : '_self') . '" class="eael-facebook-feed-post-time"><i class="far fa-clock" aria-hidden="true"></i> ' . date("d M Y", strtotime($item['created_time'])) . '</a>';
105
- }
106
- $html .= '</header>';
107
 
108
- if ($settings['eael_facebook_feed_message'] && !empty($message)) {
109
- $html .= '<div class="eael-facebook-feed-item-content">
110
- <p class="eael-facebook-feed-message">' . $this->eael_str_check($message) . '</p>
111
  </div>';
112
- }
113
 
114
- if (!empty($photo) || isset($item['attachments']['data'])) {
115
- $html .= '<div class="eael-facebook-feed-preview-wrap">';
116
- if ($item['status_type'] == 'shared_story') {
117
 
118
- if( isset($settings['eael_facebook_feed_is_show_preview_thumbnail']) && 'yes' == $settings['eael_facebook_feed_is_show_preview_thumbnail'] ) {
119
 
120
- $html .= '<a href="' . esc_url( $item['permalink_url'] ) . '" target="' . ( $settings['eael_facebook_feed_link_target'] == 'yes' ? '_blank' : '_self' ) . '" class="eael-facebook-feed-preview-img">';
121
- if ( $item['attachments']['data'][0]['media_type'] == 'video' ) {
122
- $html .= '<img class="eael-facebook-feed-img" src="' . esc_url( $photo ) . '">
123
  <div class="eael-facebook-feed-preview-overlay"><i class="far fa-play-circle" aria-hidden="true"></i></div>';
124
- } else {
125
- $html .= '<img class="eael-facebook-feed-img" src="' . esc_url( $photo ) . '">';
126
- }
127
- $html .= '</a>';
128
- }
129
-
130
- $html .= '<div class="eael-facebook-feed-url-preview">';
131
- if( isset($settings['eael_facebook_feed_is_show_preview_host']) && 'yes' == $settings['eael_facebook_feed_is_show_preview_host'] ) {
132
- $html .= '<p class="eael-facebook-feed-url-host">' . parse_url($item['attachments']['data'][0]['unshimmed_url'])['host'] . '</p>';
133
- }
134
- if( isset($settings['eael_facebook_feed_is_show_preview_title']) && 'yes' == $settings['eael_facebook_feed_is_show_preview_title'] ) {
135
- $html .= '<h2 class="eael-facebook-feed-url-title">' . esc_html( $item['attachments']['data'][0]['title'] ) . '</h2>';
136
- }
137
-
138
- if( isset($settings['eael_facebook_feed_is_show_preview_description']) && 'yes' == $settings['eael_facebook_feed_is_show_preview_description'] ) {
139
- $description = isset( $item['attachments']['data'][0]['description'] ) ? $item['attachments']['data'][0]['description'] : '';
140
- $html .= '<p class="eael-facebook-feed-url-description">' . $description . '</p>';
141
- }
142
- $html .= '</div>';
143
-
144
- } else if ($item['status_type'] == 'added_video') {
145
- if( isset($settings['eael_facebook_feed_is_show_preview_thumbnail']) && 'yes' == $settings['eael_facebook_feed_is_show_preview_thumbnail'] ) {
146
-
147
- $html .= '<a href="' . esc_url( $item['permalink_url'] ) . '" target="' . ( $settings['eael_facebook_feed_link_target'] == 'yes' ? '_blank' : '_self' ) . '" class="eael-facebook-feed-preview-img">
148
  <img class="eael-facebook-feed-img" src="' . esc_url( $photo ) . '">
149
  <div class="eael-facebook-feed-preview-overlay"><i class="far fa-play-circle" aria-hidden="true"></i></div>
150
  </a>';
151
- }
152
- } else {
153
- if( isset($settings['eael_facebook_feed_is_show_preview_thumbnail']) && 'yes' == $settings['eael_facebook_feed_is_show_preview_thumbnail'] ) {
154
 
155
- $html .= '<a href="' . esc_url( $item['permalink_url'] ) . '" target="' . ( $settings['eael_facebook_feed_link_target'] == 'yes' ? '_blank' : '_self' ) . '" class="eael-facebook-feed-preview-img">
156
  <img class="eael-facebook-feed-img" src="' . esc_url( $photo ) . '">
157
  </a>';
158
 
159
- }
160
- }
161
- $html .= '</div>';
162
- }
163
 
164
 
165
- if ($settings['eael_facebook_feed_likes'] || $settings['eael_facebook_feed_comments']) {
166
- $html .= '<footer class="eael-facebook-feed-item-footer">
167
  <div class="clearfix">';
168
- if ($settings['eael_facebook_feed_likes']) {
169
- $html .= '<span class="eael-facebook-feed-post-likes"><i class="far fa-thumbs-up" aria-hidden="true"></i> ' . esc_html( $likes ) . '</span>';
170
- }
171
- if ($settings['eael_facebook_feed_comments']) {
172
- $html .= '<span class="eael-facebook-feed-post-comments"><i class="far fa-comments" aria-hidden="true"></i> ' . esc_html( $comments ) . '</span>';
173
- }
174
- $html .= '</div>
175
  </footer>';
176
- }
177
- $html .= '</div>
178
  </div>';
179
- } else {
180
- $html .= '<a href="' . esc_url( $item['permalink_url'] ) . '" target="' . ($settings['eael_facebook_feed_link_target'] ? '_blank' : '_self') . '" class="eael-facebook-feed-item">
181
  <div class="eael-facebook-feed-item-inner">
182
- <img class="eael-facebook-feed-img" src="' . (empty($photo) ? EAEL_PLUGIN_URL . 'assets/front-end/img/flexia-preview.jpg' : esc_url( $photo )) . '">';
183
 
184
- if ($settings['eael_facebook_feed_likes'] || $settings['eael_facebook_feed_comments']) {
185
- $html .= '<div class="eael-facebook-feed-item-overlay">
186
  <div class="eael-facebook-feed-item-overlay-inner">
187
  <div class="eael-facebook-feed-meta">';
188
- if ($settings['eael_facebook_feed_likes']) {
189
- $html .= '<span class="eael-facebook-feed-post-likes"><i class="far fa-thumbs-up" aria-hidden="true"></i> ' . esc_html( $likes ) . '</span>';
190
- }
191
- if ($settings['eael_facebook_feed_comments']) {
192
- $html .= '<span class="eael-facebook-feed-post-comments"><i class="far fa-comments" aria-hidden="true"></i> ' . esc_html( $comments ) . '</span>';
193
- }
194
- $html .= '</div>
195
  </div>
196
  </div>';
197
- }
198
- $html .= '</div>
199
  </a>';
200
- }
201
- }
202
-
203
- if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'facebook_feed_load_more') {
204
- $data = [
205
- 'num_pages' => ceil(count($facebook_data) / $settings['eael_facebook_feed_image_count']['size']),
206
- 'html' => $html,
207
- ];
208
- while (ob_get_status()) {
209
- ob_end_clean();
210
- }
211
- if (function_exists('gzencode')) {
212
- $response = gzencode(wp_json_encode($data));
213
- header('Content-Type: application/json; charset=utf-8');
214
- header('Content-Encoding: gzip');
215
- header('Content-Length: ' . strlen($response));
216
-
217
- echo $response;
218
- } else {
219
- wp_send_json($data);
220
- }
221
- wp_die();
222
-
223
- }
224
-
225
- return $html;
226
- }
227
-
228
- public function eael_str_check($textData = '') {
229
  $stringText = '';
230
- if(strlen($textData) > 5) {
231
- $explodeText = explode(' ', trim($textData));
232
- for($st = 0; $st < count($explodeText); $st++) {
233
- $pos = stripos(trim($explodeText[$st]), '#');
234
- $pos1 = stripos(trim($explodeText[$st]), '@');
235
- $poshttp = stripos(trim($explodeText[$st]), 'http');
236
- $poshttps = stripos(trim($explodeText[$st]), 'https');
237
-
238
- if($pos !== false) {
239
- $stringText .= '<a href="https://facebook.com/hashtag/' . str_replace('#', '', $explodeText[$st]) . '?source=feed_text" target="_blank"> ' . esc_html( $explodeText[$st] ) . ' </a>';
240
- } elseif($pos1 !== false) {
241
- $stringText .= '<a href="https://facebook.com/' . $explodeText[$st] . '/" target="_blank"> ' . esc_html( $explodeText[$st] ) . ' </a>';
242
- } elseif($poshttp !== false || $poshttps !== false) {
243
- $stringText .= '<a href="' . esc_url( $explodeText[$st] ) . '" target="_blank"> ' . esc_html( $explodeText[$st] ) . ' </a>';
244
  } else {
245
- $stringText .= ' ' . $explodeText[$st];
246
  }
247
  }
248
  }
2
 
3
  namespace Essential_Addons_Elementor\Traits;
4
 
5
+ if ( ! defined( 'ABSPATH' ) ) {
6
+ exit;
7
  } // Exit if accessed directly
8
  use \Essential_Addons_Elementor\Classes\Helper as HelperClass;
9
 
10
+ trait Facebook_Feed {
11
+ /**
12
+ * Facebook Feed
13
+ *
14
+ * @param array $settings optional widget's settings
15
+ *
16
+ * @return false|string|void
17
+ * @since 3.4.0
18
+ */
19
+ public function facebook_feed_render_items( $settings = [] ) {
20
+ // check if ajax request
21
+ if ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'facebook_feed_load_more' ) {
22
+ $ajax = wp_doing_ajax();
23
+ // check ajax referer
24
+ check_ajax_referer( 'essential-addons-elementor', 'security' );
25
+
26
+ // init vars
27
+ $page = isset( $_POST['page'] ) ? intval( $_REQUEST['page'], 10 ) : 0;
28
+ if ( ! empty( $_POST['post_id'] ) ) {
29
+ $post_id = intval( $_POST['post_id'], 10 );
30
+ } else {
31
+ $err_msg = __( 'Post ID is missing', 'essential-addons-for-elementor-lite' );
32
+ if ( $ajax ) {
33
+ wp_send_json_error( $err_msg );
34
+ }
35
+
36
+ return false;
37
+ }
38
+ if ( ! empty( $_POST['widget_id'] ) ) {
39
+ $widget_id = sanitize_text_field( $_POST['widget_id'] );
40
+ } else {
41
+ $err_msg = __( 'Widget ID is missing', 'essential-addons-for-elementor-lite' );
42
+ if ( $ajax ) {
43
+ wp_send_json_error( $err_msg );
44
+ }
45
+
46
+ return false;
47
+ }
48
+ $settings = HelperClass::eael_get_widget_settings( $post_id, $widget_id );
49
+
50
+ } else {
51
+ // init vars
52
+ $page = 0;
53
+ $settings = ! empty( $settings ) ? $settings : $this->get_settings_for_display();
54
+ }
55
+
56
+ $html = '';
57
+ $page_id = $settings['eael_facebook_feed_page_id'];
58
+ $token = $settings['eael_facebook_feed_access_token'];
59
+
60
+ if ( empty( $page_id ) || empty( $token ) ) {
61
+ return;
62
+ }
63
+
64
+ $key = 'eael_facebook_feed_' . md5( str_rot13( str_replace( '.', '', $page_id . $token ) ) . $settings['eael_facebook_feed_cache_limit'] );
65
+ $facebook_data = get_transient( $key );
66
+ if ( $facebook_data == false ) {
67
+ $facebook_data = wp_remote_retrieve_body( wp_remote_get( "https://graph.facebook.com/v8.0/{$page_id}/posts?fields=status_type,created_time,from,message,story,full_picture,permalink_url,attachments.limit(1){type,media_type,title,description,unshimmed_url},comments.summary(total_count),reactions.summary(total_count)&limit=99&access_token={$token}", [
68
+ 'timeout' => 70,
69
+ ] ) );
70
+ $facebook_data = json_decode( $facebook_data, true );
71
+ if ( isset( $facebook_data['data'] ) ) {
72
+ set_transient( $key, $facebook_data, ( $settings['eael_facebook_feed_cache_limit'] * MINUTE_IN_SECONDS ) );
73
+ }
74
+ }
75
+
76
+ if ( ! isset( $facebook_data['data'] ) ) {
77
+ return;
78
+ }
79
+ $facebook_data = $facebook_data['data'];
80
+
81
+ switch ( $settings['eael_facebook_feed_sort_by'] ) {
82
+ case 'least-recent':
83
+ $facebook_data = array_reverse( $facebook_data );
84
+ break;
85
+ }
86
+ $items = array_splice( $facebook_data, ( $page * $settings['eael_facebook_feed_image_count']['size'] ), $settings['eael_facebook_feed_image_count']['size'] );
87
+ foreach ( $items as $item ) {
88
+ $t = 'eael_facebook_feed_message_max_length'; // short it
89
+ $limit = isset( $settings[ $t ] ) && isset( $settings[ $t ]['size'] ) ? $settings[ $t ]['size'] : null;
90
+ $message = wp_trim_words( ( isset( $item['message'] ) ? $item['message'] : ( isset( $item['story'] ) ? $item['story'] : '' ) ), $limit, '...' );
91
+ $photo = ( isset( $item['full_picture'] ) ? esc_url( $item['full_picture'] ) : '' );
92
+ $likes = ( isset( $item['reactions'] ) ? $item['reactions']['summary']['total_count'] : 0 );
93
+ $comments = ( isset( $item['comments'] ) ? $item['comments']['summary']['total_count'] : 0 );
94
+
95
+ if ( $settings['eael_facebook_feed_layout'] == 'card' ) {
96
+ $html .= '<div class="eael-facebook-feed-item">
97
  <div class="eael-facebook-feed-item-inner">
98
  <header class="eael-facebook-feed-item-header clearfix">
99
  <div class="eael-facebook-feed-item-user clearfix">
100
+ <a href="https://www.facebook.com/' . $page_id . '" target="' . ( $settings['eael_facebook_feed_link_target'] == 'yes' ? '_blank' : '_self' ) . '"><img src="https://graph.facebook.com/v4.0/' . $page_id . '/picture" alt="' . esc_attr( $item['from']['name'] ) . '" class="eael-facebook-feed-avatar"></a>
101
+ <a href="https://www.facebook.com/' . $page_id . '" target="' . ( $settings['eael_facebook_feed_link_target'] == 'yes' ? '_blank' : '_self' ) . '"><p class="eael-facebook-feed-username">' . esc_html( $item['from']['name'] ) . '</p></a>
102
  </div>';
103
 
104
+ if ( $settings['eael_facebook_feed_date'] ) {
105
+ $html .= '<a href="' . esc_url( $item['permalink_url'] ) . '" target="' . ( $settings['eael_facebook_feed_link_target'] ? '_blank' : '_self' ) . '" class="eael-facebook-feed-post-time"><i class="far fa-clock" aria-hidden="true"></i> ' . date( "d M Y", strtotime( $item['created_time'] ) ) . '</a>';
106
+ }
107
+ $html .= '</header>';
108
 
109
+ if ( $settings['eael_facebook_feed_message'] && ! empty( $message ) ) {
110
+ $html .= '<div class="eael-facebook-feed-item-content">
111
+ <p class="eael-facebook-feed-message">' . $this->eael_str_check( $message ) . '</p>
112
  </div>';
113
+ }
114
 
115
+ if ( ! empty( $photo ) || isset( $item['attachments']['data'] ) ) {
116
+ $html .= '<div class="eael-facebook-feed-preview-wrap">';
117
+ if ( $item['status_type'] == 'shared_story' ) {
118
 
119
+ if ( isset( $settings['eael_facebook_feed_is_show_preview_thumbnail'] ) && 'yes' == $settings['eael_facebook_feed_is_show_preview_thumbnail'] ) {
120
 
121
+ $html .= '<a href="' . esc_url( $item['permalink_url'] ) . '" target="' . ( $settings['eael_facebook_feed_link_target'] == 'yes' ? '_blank' : '_self' ) . '" class="eael-facebook-feed-preview-img">';
122
+ if ( $item['attachments']['data'][0]['media_type'] == 'video' ) {
123
+ $html .= '<img class="eael-facebook-feed-img" src="' . esc_url( $photo ) . '">
124
  <div class="eael-facebook-feed-preview-overlay"><i class="far fa-play-circle" aria-hidden="true"></i></div>';
125
+ } else {
126
+ $html .= '<img class="eael-facebook-feed-img" src="' . esc_url( $photo ) . '">';
127
+ }
128
+ $html .= '</a>';
129
+ }
130
+
131
+ $html .= '<div class="eael-facebook-feed-url-preview">';
132
+ if ( isset( $settings['eael_facebook_feed_is_show_preview_host'] ) && 'yes' == $settings['eael_facebook_feed_is_show_preview_host'] ) {
133
+ $html .= '<p class="eael-facebook-feed-url-host">' . parse_url( $item['attachments']['data'][0]['unshimmed_url'] )['host'] . '</p>';
134
+ }
135
+ if ( isset( $settings['eael_facebook_feed_is_show_preview_title'] ) && 'yes' == $settings['eael_facebook_feed_is_show_preview_title'] ) {
136
+ $html .= '<h2 class="eael-facebook-feed-url-title">' . esc_html( $item['attachments']['data'][0]['title'] ) . '</h2>';
137
+ }
138
+
139
+ if ( isset( $settings['eael_facebook_feed_is_show_preview_description'] ) && 'yes' == $settings['eael_facebook_feed_is_show_preview_description'] ) {
140
+ $description = isset( $item['attachments']['data'][0]['description'] ) ? $item['attachments']['data'][0]['description'] : '';
141
+ $html .= '<p class="eael-facebook-feed-url-description">' . $description . '</p>';
142
+ }
143
+ $html .= '</div>';
144
+
145
+ } else if ( $item['status_type'] == 'added_video' ) {
146
+ if ( isset( $settings['eael_facebook_feed_is_show_preview_thumbnail'] ) && 'yes' == $settings['eael_facebook_feed_is_show_preview_thumbnail'] ) {
147
+
148
+ $html .= '<a href="' . esc_url( $item['permalink_url'] ) . '" target="' . ( $settings['eael_facebook_feed_link_target'] == 'yes' ? '_blank' : '_self' ) . '" class="eael-facebook-feed-preview-img">
149
  <img class="eael-facebook-feed-img" src="' . esc_url( $photo ) . '">
150
  <div class="eael-facebook-feed-preview-overlay"><i class="far fa-play-circle" aria-hidden="true"></i></div>
151
  </a>';
152
+ }
153
+ } else {
154
+ if ( isset( $settings['eael_facebook_feed_is_show_preview_thumbnail'] ) && 'yes' == $settings['eael_facebook_feed_is_show_preview_thumbnail'] ) {
155
 
156
+ $html .= '<a href="' . esc_url( $item['permalink_url'] ) . '" target="' . ( $settings['eael_facebook_feed_link_target'] == 'yes' ? '_blank' : '_self' ) . '" class="eael-facebook-feed-preview-img">
157
  <img class="eael-facebook-feed-img" src="' . esc_url( $photo ) . '">
158
  </a>';
159
 
160
+ }
161
+ }
162
+ $html .= '</div>';
163
+ }
164
 
165
 
166
+ if ( $settings['eael_facebook_feed_likes'] || $settings['eael_facebook_feed_comments'] ) {
167
+ $html .= '<footer class="eael-facebook-feed-item-footer">
168
  <div class="clearfix">';
169
+ if ( $settings['eael_facebook_feed_likes'] ) {
170
+ $html .= '<span class="eael-facebook-feed-post-likes"><i class="far fa-thumbs-up" aria-hidden="true"></i> ' . esc_html( $likes ) . '</span>';
171
+ }
172
+ if ( $settings['eael_facebook_feed_comments'] ) {
173
+ $html .= '<span class="eael-facebook-feed-post-comments"><i class="far fa-comments" aria-hidden="true"></i> ' . esc_html( $comments ) . '</span>';
174
+ }
175
+ $html .= '</div>
176
  </footer>';
177
+ }
178
+ $html .= '</div>
179
  </div>';
180
+ } else {
181
+ $html .= '<a href="' . esc_url( $item['permalink_url'] ) . '" target="' . ( $settings['eael_facebook_feed_link_target'] ? '_blank' : '_self' ) . '" class="eael-facebook-feed-item">
182
  <div class="eael-facebook-feed-item-inner">
183
+ <img class="eael-facebook-feed-img" src="' . ( empty( $photo ) ? EAEL_PLUGIN_URL . 'assets/front-end/img/flexia-preview.jpg' : esc_url( $photo ) ) . '">';
184
 
185
+ if ( $settings['eael_facebook_feed_likes'] || $settings['eael_facebook_feed_comments'] ) {
186
+ $html .= '<div class="eael-facebook-feed-item-overlay">
187
  <div class="eael-facebook-feed-item-overlay-inner">
188
  <div class="eael-facebook-feed-meta">';
189
+ if ( $settings['eael_facebook_feed_likes'] ) {
190
+ $html .= '<span class="eael-facebook-feed-post-likes"><i class="far fa-thumbs-up" aria-hidden="true"></i> ' . esc_html( $likes ) . '</span>';
191
+ }
192
+ if ( $settings['eael_facebook_feed_comments'] ) {
193
+ $html .= '<span class="eael-facebook-feed-post-comments"><i class="far fa-comments" aria-hidden="true"></i> ' . esc_html( $comments ) . '</span>';
194
+ }
195
+ $html .= '</div>
196
  </div>
197
  </div>';
198
+ }
199
+ $html .= '</div>
200
  </a>';
201
+ }
202
+ }
203
+
204
+ if ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'facebook_feed_load_more' ) {
205
+ $data = [
206
+ 'num_pages' => ceil( count( $facebook_data ) / $settings['eael_facebook_feed_image_count']['size'] ),
207
+ 'html' => $html,
208
+ ];
209
+ while ( ob_get_status() ) {
210
+ ob_end_clean();
211
+ }
212
+ if ( function_exists( 'gzencode' ) ) {
213
+ $response = gzencode( wp_json_encode( $data ) );
214
+ header( 'Content-Type: application/json; charset=utf-8' );
215
+ header( 'Content-Encoding: gzip' );
216
+ header( 'Content-Length: ' . strlen( $response ) );
217
+
218
+ printf( '%1$s', $response );
219
+ } else {
220
+ wp_send_json( $data );
221
+ }
222
+ wp_die();
223
+
224
+ }
225
+
226
+ return $html;
227
+ }
228
+
229
+ public function eael_str_check( $textData = '' ) {
230
  $stringText = '';
231
+ if ( strlen( $textData ) > 5 ) {
232
+ $explodeText = explode( ' ', trim( $textData ) );
233
+ for ( $st = 0; $st < count( $explodeText ); $st ++ ) {
234
+ $pos = stripos( trim( $explodeText[ $st ] ), '#' );
235
+ $pos1 = stripos( trim( $explodeText[ $st ] ), '@' );
236
+ $poshttp = stripos( trim( $explodeText[ $st ] ), 'http' );
237
+ $poshttps = stripos( trim( $explodeText[ $st ] ), 'https' );
238
+
239
+ if ( $pos !== false ) {
240
+ $stringText .= '<a href="https://facebook.com/hashtag/' . str_replace( '#', '', $explodeText[ $st ] ) . '?source=feed_text" target="_blank"> ' . esc_html( $explodeText[ $st ] ) . ' </a>';
241
+ } elseif ( $pos1 !== false ) {
242
+ $stringText .= '<a href="https://facebook.com/' . $explodeText[ $st ] . '/" target="_blank"> ' . esc_html( $explodeText[ $st ] ) . ' </a>';
243
+ } elseif ( $poshttp !== false || $poshttps !== false ) {
244
+ $stringText .= '<a href="' . esc_url( $explodeText[ $st ] ) . '" target="_blank"> ' . esc_html( $explodeText[ $st ] ) . ' </a>';
245
  } else {
246
+ $stringText .= ' ' . $explodeText[ $st ];
247
  }
248
  }
249
  }
includes/Traits/Generator.php CHANGED
@@ -236,7 +236,7 @@ trait Generator {
236
 
237
  // output custom js as fallback
238
  if ( $this->custom_js_strings ) {
239
- echo '<script>' . $this->custom_js_strings . '</script>';
240
  }
241
  }
242
 
236
 
237
  // output custom js as fallback
238
  if ( $this->custom_js_strings ) {
239
+ printf( '<script>%1$s</script>', $this->custom_js_strings );
240
  }
241
  }
242
 
includes/Traits/Helper.php CHANGED
@@ -174,9 +174,9 @@ trait Helper
174
  header( 'Content-Encoding: gzip' );
175
  header( 'Content-Length: ' . strlen( $response ) );
176
 
177
- echo $response;
178
  } else {
179
- echo $html;
180
  }
181
  wp_die();
182
  }
@@ -736,7 +736,8 @@ trait Helper
736
 
737
  $setPagination .="</ul>";
738
  }
739
- echo $setPagination;
 
740
  wp_die();
741
  }
742
 
@@ -1018,7 +1019,7 @@ trait Helper
1018
  $query->the_post();
1019
  $html .= HelperClass::include_with_variable( $file_path, [ 'settings' => $settings ] );
1020
  }
1021
- print $html;
1022
  wp_reset_postdata();
1023
  }
1024
  }
174
  header( 'Content-Encoding: gzip' );
175
  header( 'Content-Length: ' . strlen( $response ) );
176
 
177
+ printf( '%1$s', $response );
178
  } else {
179
+ echo wp_kses_post( $html );
180
  }
181
  wp_die();
182
  }
736
 
737
  $setPagination .="</ul>";
738
  }
739
+
740
+ printf('%1$s', $setPagination);
741
  wp_die();
742
  }
743
 
1019
  $query->the_post();
1020
  $html .= HelperClass::include_with_variable( $file_path, [ 'settings' => $settings ] );
1021
  }
1022
+ printf( '%1$s', $html );
1023
  wp_reset_postdata();
1024
  }
1025
  }
languages/essential-addons-for-elementor-lite.pot CHANGED
@@ -61,7 +61,7 @@ msgstr ""
61
  msgid "Install Now!"
62
  msgstr ""
63
 
64
- #: ../includes/Classes/WPDeveloper_Plugin_Installer.php:151, ../includes/Classes/WPDeveloper_Plugin_Installer.php:169, ../includes/Classes/WPDeveloper_Plugin_Installer.php:188, ../includes/Classes/WPDeveloper_Setup_Wizard.php:517, ../includes/Classes/WPDeveloper_Setup_Wizard.php:543, ../includes/Traits/Admin.php:141, ../includes/Traits/Helper.php:850, ../includes/Traits/Library.php:158
65
  msgid "you are not allowed to do this action"
66
  msgstr ""
67
 
@@ -197,7 +197,7 @@ msgstr ""
197
  msgid "Upgrade to PRO"
198
  msgstr ""
199
 
200
- #: ../includes/Classes/WPDeveloper_Setup_Wizard.php:324, ../includes/Traits/Helper.php:826, ../includes/templates/admin/general.php:31
201
  msgid "Install Templately"
202
  msgstr ""
203
 
@@ -8131,27 +8131,27 @@ msgstr ""
8131
  msgid "Loading..."
8132
  msgstr ""
8133
 
8134
- #: ../includes/Traits/Facebook_Feed.php:32
8135
  msgid "Post ID is missing"
8136
  msgstr ""
8137
 
8138
- #: ../includes/Traits/Facebook_Feed.php:41, ../includes/Traits/Helper.php:57, ../includes/Traits/Helper.php:962, ../includes/Traits/Login_Registration.php:62, ../includes/Traits/Login_Registration.php:227, ../includes/Traits/Woo_Product_Comparable.php:2133
8139
  msgid "Widget ID is missing"
8140
  msgstr ""
8141
 
8142
- #: ../includes/Traits/Helper.php:29, ../includes/Traits/Helper.php:934, ../includes/Traits/Login_Registration.php:79, ../includes/Traits/Login_Registration.php:200
8143
  msgid "Insecure form submitted without security token"
8144
  msgstr ""
8145
 
8146
- #: ../includes/Traits/Helper.php:37, ../includes/Traits/Helper.php:942, ../includes/Traits/Login_Registration.php:92, ../includes/Traits/Login_Registration.php:210, ../includes/Traits/Woo_Product_Comparable.php:2170
8147
  msgid "Security token did not match"
8148
  msgstr ""
8149
 
8150
- #: ../includes/Traits/Helper.php:47, ../includes/Traits/Helper.php:952, ../includes/Traits/Login_Registration.php:55, ../includes/Traits/Login_Registration.php:222, ../includes/Traits/Woo_Product_Comparable.php:2128
8151
  msgid "Page ID is missing"
8152
  msgstr ""
8153
 
8154
- #: ../includes/Traits/Helper.php:67, ../includes/Traits/Helper.php:971
8155
  msgid "Widget settings are not found. Did you save the widget before using load more??"
8156
  msgstr ""
8157
 
@@ -8163,35 +8163,35 @@ msgstr ""
8163
  msgid "%s ago"
8164
  msgstr ""
8165
 
8166
- #: ../includes/Traits/Helper.php:808
8167
  msgid "1,700+ Stunning Templates"
8168
  msgstr ""
8169
 
8170
- #: ../includes/Traits/Helper.php:809
8171
  msgid "Supports Elementor & Gutenberg"
8172
  msgstr ""
8173
 
8174
- #: ../includes/Traits/Helper.php:810
8175
  msgid "Powering up 100,000+ Websites"
8176
  msgstr ""
8177
 
8178
- #: ../includes/Traits/Helper.php:811
8179
  msgid "Cloud Collaboration with Team"
8180
  msgstr ""
8181
 
8182
- #: ../includes/Traits/Helper.php:820
8183
  msgid "Don’t Show This Again"
8184
  msgstr ""
8185
 
8186
- #: ../includes/Traits/Helper.php:832
8187
  msgid "Activate Templately"
8188
  msgstr ""
8189
 
8190
- #: ../includes/Traits/Helper.php:829
8191
  msgid "Activated Templately"
8192
  msgstr ""
8193
 
8194
- #: ../includes/Traits/Helper.php:835, ../includes/templates/admin/popup.php:169
8195
  msgid "Submit"
8196
  msgstr ""
8197
 
61
  msgid "Install Now!"
62
  msgstr ""
63
 
64
+ #: ../includes/Classes/WPDeveloper_Plugin_Installer.php:151, ../includes/Classes/WPDeveloper_Plugin_Installer.php:169, ../includes/Classes/WPDeveloper_Plugin_Installer.php:188, ../includes/Classes/WPDeveloper_Setup_Wizard.php:517, ../includes/Classes/WPDeveloper_Setup_Wizard.php:543, ../includes/Traits/Admin.php:141, ../includes/Traits/Helper.php:851, ../includes/Traits/Library.php:158
65
  msgid "you are not allowed to do this action"
66
  msgstr ""
67
 
197
  msgid "Upgrade to PRO"
198
  msgstr ""
199
 
200
+ #: ../includes/Classes/WPDeveloper_Setup_Wizard.php:324, ../includes/Traits/Helper.php:827, ../includes/templates/admin/general.php:31
201
  msgid "Install Templately"
202
  msgstr ""
203
 
8131
  msgid "Loading..."
8132
  msgstr ""
8133
 
8134
+ #: ../includes/Traits/Facebook_Feed.php:31
8135
  msgid "Post ID is missing"
8136
  msgstr ""
8137
 
8138
+ #: ../includes/Traits/Facebook_Feed.php:41, ../includes/Traits/Helper.php:57, ../includes/Traits/Helper.php:963, ../includes/Traits/Login_Registration.php:62, ../includes/Traits/Login_Registration.php:227, ../includes/Traits/Woo_Product_Comparable.php:2133
8139
  msgid "Widget ID is missing"
8140
  msgstr ""
8141
 
8142
+ #: ../includes/Traits/Helper.php:29, ../includes/Traits/Helper.php:935, ../includes/Traits/Login_Registration.php:79, ../includes/Traits/Login_Registration.php:200
8143
  msgid "Insecure form submitted without security token"
8144
  msgstr ""
8145
 
8146
+ #: ../includes/Traits/Helper.php:37, ../includes/Traits/Helper.php:943, ../includes/Traits/Login_Registration.php:92, ../includes/Traits/Login_Registration.php:210, ../includes/Traits/Woo_Product_Comparable.php:2170
8147
  msgid "Security token did not match"
8148
  msgstr ""
8149
 
8150
+ #: ../includes/Traits/Helper.php:47, ../includes/Traits/Helper.php:953, ../includes/Traits/Login_Registration.php:55, ../includes/Traits/Login_Registration.php:222, ../includes/Traits/Woo_Product_Comparable.php:2128
8151
  msgid "Page ID is missing"
8152
  msgstr ""
8153
 
8154
+ #: ../includes/Traits/Helper.php:67, ../includes/Traits/Helper.php:972
8155
  msgid "Widget settings are not found. Did you save the widget before using load more??"
8156
  msgstr ""
8157
 
8163
  msgid "%s ago"
8164
  msgstr ""
8165
 
8166
+ #: ../includes/Traits/Helper.php:809
8167
  msgid "1,700+ Stunning Templates"
8168
  msgstr ""
8169
 
8170
+ #: ../includes/Traits/Helper.php:810
8171
  msgid "Supports Elementor & Gutenberg"
8172
  msgstr ""
8173
 
8174
+ #: ../includes/Traits/Helper.php:811
8175
  msgid "Powering up 100,000+ Websites"
8176
  msgstr ""
8177
 
8178
+ #: ../includes/Traits/Helper.php:812
8179
  msgid "Cloud Collaboration with Team"
8180
  msgstr ""
8181
 
8182
+ #: ../includes/Traits/Helper.php:821
8183
  msgid "Don’t Show This Again"
8184
  msgstr ""
8185
 
8186
+ #: ../includes/Traits/Helper.php:833
8187
  msgid "Activate Templately"
8188
  msgstr ""
8189
 
8190
+ #: ../includes/Traits/Helper.php:830
8191
  msgid "Activated Templately"
8192
  msgstr ""
8193
 
8194
+ #: ../includes/Traits/Helper.php:836, ../includes/templates/admin/popup.php:169
8195
  msgid "Submit"
8196
  msgstr ""
8197
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Tags: elementor, elements, addons, elementor addons, elementor widget, elementor
4
  Requires at least: 5.0
5
  Tested up to: 5.9
6
  Requires PHP: 5.6
7
- Stable tag: 5.0.6
8
  License: GPLv3
9
  License URI: https://opensource.org/licenses/GPL-3.0
10
 
@@ -241,6 +241,11 @@ Your existing elements/content will work with premium version. So you won't lose
241
 
242
  == Changelog ==
243
 
 
 
 
 
 
244
  = 5.0.6 - 02/02/2022 =
245
 
246
  - Improved: Data sanitization, validation & escaping for Security Enhancement
4
  Requires at least: 5.0
5
  Tested up to: 5.9
6
  Requires PHP: 5.6
7
+ Stable tag: 5.0.7
8
  License: GPLv3
9
  License URI: https://opensource.org/licenses/GPL-3.0
10
 
241
 
242
  == Changelog ==
243
 
244
+ = 5.0.7 - 07/02/2022 =
245
+
246
+ - Improved: Data escaping for Security Enhancement
247
+ - Few minor bug fixes & improvements
248
+
249
  = 5.0.6 - 02/02/2022 =
250
 
251
  - Improved: Data sanitization, validation & escaping for Security Enhancement