FEEDZY RSS Feeds Lite - Version 3.2.7

Version Description

  • 2018-01-05
Download this release

Release Info

Developer codeinwp
Plugin Icon 128x128 FEEDZY RSS Feeds Lite
Version 3.2.7
Comparing to
See all releases

Code changes from version 3.2.6 to 3.2.7

CHANGELOG.md CHANGED
@@ -1,4 +1,14 @@
1
 
 
 
 
 
 
 
 
 
 
 
2
  ### v3.2.6 - 2017-11-16
3
  **Changes:**
4
  * Adds compatibility with WordPress 4.9
1
 
2
+ ### v3.2.7 - 2018-02-20
3
+ **Changes:**
4
+ * debug being printed on the site
5
+
6
+ ### v3.2.7 - 2018-01-05
7
+ **Changes:**
8
+ * Fix compatibility with SiteOrigin Page Builder.
9
+ * Adds full content import from feed.
10
+ * Fix issue with img scraped from articles.
11
+
12
  ### v3.2.6 - 2017-11-16
13
  **Changes:**
14
  * Adds compatibility with WordPress 4.9
css/feedzy-rss-feeds.css CHANGED
@@ -2,7 +2,7 @@
2
  * feedzy-rss-feeds.css
3
  * Feedzy RSS Feed
4
  * Copyright: (c) 2016 Themeisle, themeisle.com
5
- * Version: 3.2.6
6
  * Plugin Name: FEEDZY RSS Feeds
7
  * Plugin URI: http://themeisle.com/plugins/feedzy-rss-feeds/
8
  * Author: Themeisle
2
  * feedzy-rss-feeds.css
3
  * Feedzy RSS Feed
4
  * Copyright: (c) 2016 Themeisle, themeisle.com
5
+ * Version: 3.2.7
6
  * Plugin Name: FEEDZY RSS Feeds
7
  * Plugin URI: http://themeisle.com/plugins/feedzy-rss-feeds/
8
  * Author: Themeisle
feedzy-rss-feed.php CHANGED
@@ -15,7 +15,7 @@
15
  * Plugin Name: Feedzy RSS Feeds Lite
16
  * Plugin URI: https://themeisle.com/plugins/feedzy-rss-feeds-lite/
17
  * Description: A small and lightweight RSS aggregator plugin. Fast and very easy to use, it allows you to aggregate multiple RSS feeds into your WordPress site through fully customizable shortcodes & widgets.
18
- * Version: 3.2.6
19
  * Author: Themeisle
20
  * Author URI: http://themeisle.com
21
  * License: GPL-2.0+
15
  * Plugin Name: Feedzy RSS Feeds Lite
16
  * Plugin URI: https://themeisle.com/plugins/feedzy-rss-feeds-lite/
17
  * Description: A small and lightweight RSS aggregator plugin. Fast and very easy to use, it allows you to aggregate multiple RSS feeds into your WordPress site through fully customizable shortcodes & widgets.
18
+ * Version: 3.2.7
19
  * Author: Themeisle
20
  * Author URI: http://themeisle.com
21
  * License: GPL-2.0+
includes/abstract/feedzy-rss-feeds-admin-abstract.php CHANGED
@@ -52,7 +52,7 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
52
  * @return string
53
  */
54
  public function feedzy_default_error_notice( $error, $feedURL ) {
55
- error_log( 'Feedzy RSS Feeds - related feed: ' . print_r( $feedURL ) . ' - Error message: ' . $this->feedzy_array_obj_string( $error ) );
56
 
57
  return '<div id="message" class="error" data-error"' . esc_attr( $this->feedzy_array_obj_string( $error ) ) . '"><p>' . __( 'Sorry, this feed is currently unavailable or does not exists anymore.', 'feedzy-rss-feeds' ) . '</p></div>';
58
  }
@@ -754,6 +754,7 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
754
  'item_date' => $item->get_date( 'U' ),
755
  'item_author' => $item->get_author(),
756
  'item_description' => $contentSummary,
 
757
  );
758
  $itemArray = apply_filters( 'feedzy_item_filter', $itemArray, $item );
759
 
@@ -837,28 +838,28 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
837
  public function feedzy_return_image( $string ) {
838
  $img = html_entity_decode( $string, ENT_QUOTES, 'UTF-8' );
839
  $pattern = '/<img[^>]+\>/i';
840
- preg_match( $pattern, $img, $matches );
 
 
841
  if ( isset( $matches[0] ) ) {
842
- $blacklistCount = 0;
843
- foreach ( $matches as $matche ) {
844
- $link = $this->feedzy_scrape_image( $matche );
845
- $blacklist = array();
846
- $blacklist = apply_filters( 'feedzy_feed_blacklist_images', $this->feedzy_blacklist_images( $blacklist ) );
847
  foreach ( $blacklist as $string ) {
848
  if ( strpos( (string) $link, $string ) !== false ) {
849
- $blacklistCount ++;
 
850
  }
851
  }
852
- if ( $blacklistCount == 0 ) {
 
853
  break;
854
  }
855
  }
856
- if ( $blacklistCount == 0 ) {
857
- return $link;
858
- }
859
  }
860
 
861
- return '';
862
  }
863
 
864
  /**
@@ -889,11 +890,9 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
889
  * @since 3.0.0
890
  * @access public
891
  *
892
- * @param array $blacklist An array with blacklisted resources.
893
- *
894
  * @return array
895
  */
896
- public function feedzy_blacklist_images( $blacklist ) {
897
  $blacklist = array(
898
  'frownie.png',
899
  'icon_arrow.gif',
@@ -923,7 +922,7 @@ abstract class Feedzy_Rss_Feeds_Admin_Abstract {
923
  'simple-smile.png',
924
  );
925
 
926
- return $blacklist;
927
  }
928
 
929
  /**
52
  * @return string
53
  */
54
  public function feedzy_default_error_notice( $error, $feedURL ) {
55
+ error_log( 'Feedzy RSS Feeds - related feed: ' . print_r( $feedURL, true ) . ' - Error message: ' . $this->feedzy_array_obj_string( $error ) );
56
 
57
  return '<div id="message" class="error" data-error"' . esc_attr( $this->feedzy_array_obj_string( $error ) ) . '"><p>' . __( 'Sorry, this feed is currently unavailable or does not exists anymore.', 'feedzy-rss-feeds' ) . '</p></div>';
58
  }
754
  'item_date' => $item->get_date( 'U' ),
755
  'item_author' => $item->get_author(),
756
  'item_description' => $contentSummary,
757
+ 'item_content' => apply_filters( 'feedzy_content', $item->get_content( false ) ),
758
  );
759
  $itemArray = apply_filters( 'feedzy_item_filter', $itemArray, $item );
760
 
838
  public function feedzy_return_image( $string ) {
839
  $img = html_entity_decode( $string, ENT_QUOTES, 'UTF-8' );
840
  $pattern = '/<img[^>]+\>/i';
841
+ preg_match_all( $pattern, $img, $matches );
842
+
843
+ $image = null;
844
  if ( isset( $matches[0] ) ) {
845
+ foreach ( $matches[0] as $match ) {
846
+ $link = $this->feedzy_scrape_image( $match );
847
+ $blacklist = $this->feedzy_blacklist_images();
848
+ $is_blacklist = false;
 
849
  foreach ( $blacklist as $string ) {
850
  if ( strpos( (string) $link, $string ) !== false ) {
851
+ $is_blacklist = true;
852
+ break;
853
  }
854
  }
855
+ if ( ! $is_blacklist ) {
856
+ $image = $link;
857
  break;
858
  }
859
  }
 
 
 
860
  }
861
 
862
+ return $image;
863
  }
864
 
865
  /**
890
  * @since 3.0.0
891
  * @access public
892
  *
 
 
893
  * @return array
894
  */
895
+ public function feedzy_blacklist_images() {
896
  $blacklist = array(
897
  'frownie.png',
898
  'icon_arrow.gif',
922
  'simple-smile.png',
923
  );
924
 
925
+ return apply_filters( 'feedzy_feed_blacklist_images', $blacklist );
926
  }
927
 
928
  /**
includes/admin/feedzy-wp-widget.php CHANGED
@@ -78,6 +78,11 @@ class feedzy_wp_widget extends WP_Widget {
78
  * @return mixed
79
  */
80
  public function form( $instance ) {
 
 
 
 
 
81
  $instance = wp_parse_args( $instance, $this->get_widget_defaults() );
82
  $widget_form = '<p>
83
  <label for="' . $this->get_field_id( 'title' ) . '">' . __( 'Widget Title', 'feedzy-rss-feeds' ) . '</label>
78
  * @return mixed
79
  */
80
  public function form( $instance ) {
81
+ $screen = get_current_screen();
82
+ // to prevent conflicts with plugins such as siteorigin page builder that call this function from outside of the 'widgets' screen.
83
+ if ( 'widgets' !== $screen->id ) {
84
+ return;
85
+ }
86
  $instance = wp_parse_args( $instance, $this->get_widget_defaults() );
87
  $widget_form = '<p>
88
  <label for="' . $this->get_field_id( 'title' ) . '">' . __( 'Widget Title', 'feedzy-rss-feeds' ) . '</label>
includes/feedzy-rss-feeds.php CHANGED
@@ -104,7 +104,7 @@ class Feedzy_Rss_Feeds {
104
  */
105
  public function init() {
106
  self::$plugin_name = 'feedzy-rss-feeds';
107
- self::$version = '3.2.6';
108
  self::$instance->load_dependencies();
109
  self::$instance->set_locale();
110
  self::$instance->define_admin_hooks();
104
  */
105
  public function init() {
106
  self::$plugin_name = 'feedzy-rss-feeds';
107
+ self::$version = '3.2.7';
108
  self::$instance->load_dependencies();
109
  self::$instance->set_locale();
110
  self::$instance->define_admin_hooks();
languages/feedzy-rss-feeds.pot CHANGED
@@ -1,14 +1,14 @@
1
- # Copyright (C) 2017 Themeisle
2
  # This file is distributed under the GPL-2.0+.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Feedzy RSS Feeds Lite 3.2.5\n"
6
  "Report-Msgid-Bugs-To: https://github.com/Codeinwp/feedzy-rss-feeds/issues\n"
7
- "POT-Creation-Date: 2017-11-03 11:31:06+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: Themeisle Translate Team <friends@themeisle.com>\n"
13
  "Language-Team: Themeisle Translate <friends@themeisle.com>\n"
14
  "X-Generator: grunt-wp-i18n 0.5.4\n"
@@ -391,11 +391,11 @@ msgstr ""
391
  msgid "Style 2"
392
  msgstr ""
393
 
394
- #: includes/admin/feedzy-wp-widget.php:83
395
  msgid "Widget Title"
396
  msgstr ""
397
 
398
- #: includes/admin/feedzy-wp-widget.php:87
399
  msgid "Intro text"
400
  msgstr ""
401
 
1
+ # Copyright (C) 2018 Themeisle
2
  # This file is distributed under the GPL-2.0+.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Feedzy RSS Feeds Lite 3.2.6\n"
6
  "Report-Msgid-Bugs-To: https://github.com/Codeinwp/feedzy-rss-feeds/issues\n"
7
+ "POT-Creation-Date: 2018-01-05 12:16:57+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: Themeisle Translate Team <friends@themeisle.com>\n"
13
  "Language-Team: Themeisle Translate <friends@themeisle.com>\n"
14
  "X-Generator: grunt-wp-i18n 0.5.4\n"
391
  msgid "Style 2"
392
  msgstr ""
393
 
394
+ #: includes/admin/feedzy-wp-widget.php:88
395
  msgid "Widget Title"
396
  msgstr ""
397
 
398
+ #: includes/admin/feedzy-wp-widget.php:92
399
  msgid "Intro text"
400
  msgstr ""
401
 
readme.md CHANGED
@@ -139,6 +139,7 @@ Become a translator and send me your translation! [Contact-me](http://themeisle.
139
  ## Frequently Asked Questions ##
140
 
141
 
 
142
  ### Is it responsive friendly? ###
143
 
144
  Yes it is.
@@ -240,6 +241,9 @@ You have to check first if your feed is valid. Please test it here: https://vali
240
  = How to use WordAI to Rephrase RSS content in Feedzy =
241
  [http://docs.themeisle.com/article/746-how-to-use-wordai-to-rephrase-rss-content-in-feedzy](http://docs.themeisle.com/article/746-how-to-use-wordai-to-rephrase-rss-content-in-feedzy)
242
 
 
 
 
243
  == Screenshots ==
244
 
245
  1. Simple example
@@ -249,6 +253,13 @@ You have to check first if your feed is valid. Please test it here: https://vali
249
 
250
 
251
  ## Changelog ##
 
 
 
 
 
 
 
252
  ### 3.2.6 - 2017-11-16 ###
253
 
254
  * Adds compatibility with WordPress 4.9
139
  ## Frequently Asked Questions ##
140
 
141
 
142
+
143
  ### Is it responsive friendly? ###
144
 
145
  Yes it is.
241
  = How to use WordAI to Rephrase RSS content in Feedzy =
242
  [http://docs.themeisle.com/article/746-how-to-use-wordai-to-rephrase-rss-content-in-feedzy](http://docs.themeisle.com/article/746-how-to-use-wordai-to-rephrase-rss-content-in-feedzy)
243
 
244
+ = Install and use the premium version of Feedzy RSS Feeds =
245
+ [http://docs.themeisle.com/article/783-install-and-use-the-premium-version-of-feedzy-rss-feeds](http://docs.themeisle.com/article/783-install-and-use-the-premium-version-of-feedzy-rss-feeds)
246
+
247
  == Screenshots ==
248
 
249
  1. Simple example
253
 
254
 
255
  ## Changelog ##
256
+ ### 3.2.7 - 2018-01-05 ###
257
+
258
+ * Fix compatibility with SiteOrigin Page Builder.
259
+ * Adds full content import from feed.
260
+ * Fix issue with img scraped from articles.
261
+
262
+
263
  ### 3.2.6 - 2017-11-16 ###
264
 
265
  * Adds compatibility with WordPress 4.9
readme.txt CHANGED
@@ -139,6 +139,8 @@ Become a translator and send me your translation! [Contact-me](http://themeisle.
139
  == Frequently Asked Questions ==
140
 
141
 
 
 
142
  = Is it responsive friendly? =
143
 
144
  Yes it is.
@@ -240,6 +242,102 @@ You have to check first if your feed is valid. Please test it here: https://vali
240
  = How to use WordAI to Rephrase RSS content in Feedzy =
241
  [http://docs.themeisle.com/article/746-how-to-use-wordai-to-rephrase-rss-content-in-feedzy](http://docs.themeisle.com/article/746-how-to-use-wordai-to-rephrase-rss-content-in-feedzy)
242
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
243
  == Screenshots ==
244
 
245
  1. Simple example
@@ -249,6 +347,13 @@ You have to check first if your feed is valid. Please test it here: https://vali
249
 
250
 
251
  == Changelog ==
 
 
 
 
 
 
 
252
  = 3.2.6 - 2017-11-16 =
253
 
254
  * Adds compatibility with WordPress 4.9
139
  == Frequently Asked Questions ==
140
 
141
 
142
+
143
+
144
  = Is it responsive friendly? =
145
 
146
  Yes it is.
242
  = How to use WordAI to Rephrase RSS content in Feedzy =
243
  [http://docs.themeisle.com/article/746-how-to-use-wordai-to-rephrase-rss-content-in-feedzy](http://docs.themeisle.com/article/746-how-to-use-wordai-to-rephrase-rss-content-in-feedzy)
244
 
245
+ = Install and use the premium version of Feedzy RSS Feeds =
246
+ [http://docs.themeisle.com/article/783-install-and-use-the-premium-version-of-feedzy-rss-feeds](http://docs.themeisle.com/article/783-install-and-use-the-premium-version-of-feedzy-rss-feeds)
247
+
248
+ = Feedzy RSS Feeds Documentation =
249
+ [https://docs.themeisle.com/article/658-feedzy-rss-feeds-documentation](https://docs.themeisle.com/article/658-feedzy-rss-feeds-documentation)
250
+
251
+ = What actions and filters are available in Feedzy =
252
+ [https://docs.themeisle.com/article/540-what-actions-and-filters-are-available-in-feedzy](https://docs.themeisle.com/article/540-what-actions-and-filters-are-available-in-feedzy)
253
+
254
+ = How to change thumbs size and aspect ratio Feedzy =
255
+ [https://docs.themeisle.com/article/551-how-to-change-thumbs-size-and-aspect-ratio-feedzy](https://docs.themeisle.com/article/551-how-to-change-thumbs-size-and-aspect-ratio-feedzy)
256
+
257
+ = How to display RSS feed time and date in local time =
258
+ [https://docs.themeisle.com/article/567-how-to-display-rss-feed-time-and-date-in-local-time](https://docs.themeisle.com/article/567-how-to-display-rss-feed-time-and-date-in-local-time)
259
+
260
+ = How to add a read more link to Feedzy =
261
+ [https://docs.themeisle.com/article/544-how-to-add-a-read-more-link-to-feedzy](https://docs.themeisle.com/article/544-how-to-add-a-read-more-link-to-feedzy)
262
+
263
+ = How to use feedzy categories =
264
+ [https://docs.themeisle.com/article/640-how-to-use-feedzy-categories](https://docs.themeisle.com/article/640-how-to-use-feedzy-categories)
265
+
266
+ = How to use your own inline css =
267
+ [https://docs.themeisle.com/article/546-how-to-use-your-own-inline-css](https://docs.themeisle.com/article/546-how-to-use-your-own-inline-css)
268
+
269
+ = How to change cache lifetime for a specific feed =
270
+ [https://docs.themeisle.com/article/547-how-to-change-cache-lifetime-for-a-specific-feed](https://docs.themeisle.com/article/547-how-to-change-cache-lifetime-for-a-specific-feed)
271
+
272
+ = How to remove featured image from blog feed =
273
+ [https://docs.themeisle.com/article/554-how-to-remove-featured-image-from-blog-feed](https://docs.themeisle.com/article/554-how-to-remove-featured-image-from-blog-feed)
274
+
275
+ = How to handle publication date and author content =
276
+ [https://docs.themeisle.com/article/549-how-to-handle-publication-date-and-author-content](https://docs.themeisle.com/article/549-how-to-handle-publication-date-and-author-content)
277
+
278
+ = How to keep html in feed items content =
279
+ [https://docs.themeisle.com/article/542-how-to-keep-html-in-feed-items-content](https://docs.themeisle.com/article/542-how-to-keep-html-in-feed-items-content)
280
+
281
+ = How to fix images that are not showing in the feed =
282
+ [https://docs.themeisle.com/article/666-how-to-fix-images-that-are-not-showing-in-the-feed](https://docs.themeisle.com/article/666-how-to-fix-images-that-are-not-showing-in-the-feed)
283
+
284
+ = How to display items in a random order =
285
+ [https://docs.themeisle.com/article/550-how-to-display-items-in-a-random-order](https://docs.themeisle.com/article/550-how-to-display-items-in-a-random-order)
286
+
287
+ = How to remove links =
288
+ [https://docs.themeisle.com/article/541-how-to-remove-links](https://docs.themeisle.com/article/541-how-to-remove-links)
289
+
290
+ = How to move Feedzy templates to your theme =
291
+ [https://docs.themeisle.com/article/573-how-to-move-feedzy-templates-to-your-theme](https://docs.themeisle.com/article/573-how-to-move-feedzy-templates-to-your-theme)
292
+
293
+ = How to remove time from publication date =
294
+ [https://docs.themeisle.com/article/553-how-to-remove-time-from-publication-date](https://docs.themeisle.com/article/553-how-to-remove-time-from-publication-date)
295
+
296
+ = How to remove plugin css =
297
+ [https://docs.themeisle.com/article/545-how-to-remove-plugin-css](https://docs.themeisle.com/article/545-how-to-remove-plugin-css)
298
+
299
+ = How to remove the end hellip =
300
+ [https://docs.themeisle.com/article/543-how-to-remove-the-end-hellip](https://docs.themeisle.com/article/543-how-to-remove-the-end-hellip)
301
+
302
+ = How to decode item title =
303
+ [https://docs.themeisle.com/article/548-how-to-decode-item-title](https://docs.themeisle.com/article/548-how-to-decode-item-title)
304
+
305
+ = How to sort feed items by title =
306
+ [https://docs.themeisle.com/article/633-how-to-sort-feed-items-by-title](https://docs.themeisle.com/article/633-how-to-sort-feed-items-by-title)
307
+
308
+ = How to import posts from feeds in Feedzy =
309
+ [https://docs.themeisle.com/article/742-how-to-import-posts-from-feeds-in-feedzy](https://docs.themeisle.com/article/742-how-to-import-posts-from-feeds-in-feedzy)
310
+
311
+ = How to change author url =
312
+ [https://docs.themeisle.com/article/636-how-to-change-author-url](https://docs.themeisle.com/article/636-how-to-change-author-url)
313
+
314
+ = How to eliminate duplicate feed items. =
315
+ [https://docs.themeisle.com/article/638-how-to-eliminate-duplicate-feed-items](https://docs.themeisle.com/article/638-how-to-eliminate-duplicate-feed-items)
316
+
317
+ = How to check whether the RSS feed is valid or not in Feedzy =
318
+ [https://docs.themeisle.com/article/716-how-to-check-whether-the-rss-feed-is-valid-or-not-in-feedzy](https://docs.themeisle.com/article/716-how-to-check-whether-the-rss-feed-is-valid-or-not-in-feedzy)
319
+
320
+ = How to change the blacklist image name =
321
+ [https://docs.themeisle.com/article/552-how-to-change-the-blacklist-image-name](https://docs.themeisle.com/article/552-how-to-change-the-blacklist-image-name)
322
+
323
+ = How to use proxy settings in Feedzy =
324
+ [https://docs.themeisle.com/article/714-how-to-use-proxy-settings-in-feedzy](https://docs.themeisle.com/article/714-how-to-use-proxy-settings-in-feedzy)
325
+
326
+ = Where can I find the import posts options in Feedzy =
327
+ [https://docs.themeisle.com/article/743-where-can-i-find-the-import-posts-options-in-feedzy](https://docs.themeisle.com/article/743-where-can-i-find-the-import-posts-options-in-feedzy)
328
+
329
+ = How to change user agent in Feedzy =
330
+ [https://docs.themeisle.com/article/713-how-to-change-user-agent-in-feedzy](https://docs.themeisle.com/article/713-how-to-change-user-agent-in-feedzy)
331
+
332
+ = How to use WordAI to Rephrase RSS content in Feedzy =
333
+ [https://docs.themeisle.com/article/746-how-to-use-wordai-to-rephrase-rss-content-in-feedzy](https://docs.themeisle.com/article/746-how-to-use-wordai-to-rephrase-rss-content-in-feedzy)
334
+
335
+ = Install and use the premium version of Feedzy RSS Feeds =
336
+ [https://docs.themeisle.com/article/783-install-and-use-the-premium-version-of-feedzy-rss-feeds](https://docs.themeisle.com/article/783-install-and-use-the-premium-version-of-feedzy-rss-feeds)
337
+
338
+ = How to sort feed items by date =
339
+ [https://docs.themeisle.com/article/817-how-to-sort-feed-items-by-date](https://docs.themeisle.com/article/817-how-to-sort-feed-items-by-date)
340
+
341
  == Screenshots ==
342
 
343
  1. Simple example
347
 
348
 
349
  == Changelog ==
350
+ = 3.2.7 - 2018-01-05 =
351
+
352
+ * Fix compatibility with SiteOrigin Page Builder.
353
+ * Adds full content import from feed.
354
+ * Fix issue with img scraped from articles.
355
+
356
+
357
  = 3.2.6 - 2017-11-16 =
358
 
359
  * Adds compatibility with WordPress 4.9
themeisle-hash.json ADDED
@@ -0,0 +1 @@
 
1
+ {"feedzy-rss-feed.php":"1c7cbe7208bf1abab30466c491afe9ae","index.php":"71c0755260138a4b7b2182c3c61179f6","uninstall.php":"0ef18b49fd2c8fa27b1c1ee8fe679428"}
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit715431a4486c2274dc1a3d8cb9376500::getLoader();
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInitfe5ae92a3fab081fcfe3c82ee105d10e::getLoader();
vendor/autoload_52.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
- return ComposerAutoloaderInit7834e6ad306641d049f3a4bade9cbd68::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInit8af7adeba1b95861ad18dfa88d59ccdf::getLoader();
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-endpoints.php ADDED
@@ -0,0 +1,312 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * The class that exposes endpoints.
4
+ *
5
+ * @package ThemeIsleSDK
6
+ * @subpackage Endpoints
7
+ * @copyright Copyright (c) 2017, Marius Cristea
8
+ * @license http://opensource.org/licenses/gpl-3.0.php GNU Public License
9
+ * @since 1.0.0
10
+ */
11
+ // Exit if accessed directly.
12
+ if ( ! defined( 'ABSPATH' ) ) {
13
+ exit;
14
+ }
15
+ if ( ! class_exists( 'ThemeIsle_SDK_Endpoints' ) ) :
16
+ /**
17
+ * Expose endpoints for ThemeIsle SDK.
18
+ */
19
+ final class ThemeIsle_SDK_Endpoints {
20
+
21
+ const SDK_ENDPOINT = 'themeisle-sdk';
22
+ const SDK_ENDPOINT_VERSION = 1;
23
+
24
+ const HASH_FILE = 'themeisle-hash.json';
25
+
26
+ // if true, the endpoint will expect a product slug and will return the value only for that.
27
+ const PRODUCT_SPECIFIC = false;
28
+
29
+ /**
30
+ * @var ThemeIsle_SDK_Product $products Array of Themeisle Product.
31
+ */
32
+ static protected $products = array();
33
+
34
+ /**
35
+ * ThemeIsle_SDK_Endpoints constructor.
36
+ *
37
+ * @param ThemeIsle_SDK_Product $product_object Product Object.
38
+ */
39
+ public function __construct( $product_object ) {
40
+ if ( $product_object instanceof ThemeIsle_SDK_Product ) {
41
+ self::$products[] = $product_object;
42
+ }
43
+ $this->setup_endpoints();
44
+ }
45
+
46
+ /**
47
+ * Setup endpoints.
48
+ */
49
+ private function setup_endpoints() {
50
+ global $wp_version;
51
+ if ( version_compare( $wp_version, '4.4', '<' ) ) {
52
+ // no REST support.
53
+ return;
54
+ }
55
+
56
+ $this->setup_rest();
57
+ }
58
+
59
+ /**
60
+ * Setup REST endpoints.
61
+ */
62
+ private function setup_rest() {
63
+ add_action( 'rest_api_init', array( $this, 'rest_register' ) );
64
+ }
65
+
66
+ /**
67
+ * Registers the endpoints
68
+ */
69
+ function rest_register() {
70
+ register_rest_route(
71
+ self::SDK_ENDPOINT . '/v' . self::SDK_ENDPOINT_VERSION,
72
+ '/checksum/' . ( self::PRODUCT_SPECIFIC ? '(?P<slug>.*)/' : '' ),
73
+ array(
74
+ 'methods' => 'GET',
75
+ 'callback' => array( $this, 'checksum' ),
76
+ )
77
+ );
78
+ }
79
+
80
+ /**
81
+ * The checksum endpoint.
82
+ *
83
+ * @param WP_REST_Request $data the request.
84
+ *
85
+ * @return WP_REST_Response Response or the error
86
+ */
87
+ function checksum( WP_REST_Request $data ) {
88
+ $products = self::$products;
89
+ if ( self::PRODUCT_SPECIFIC ) {
90
+ $params = $this->validate_params( $data, array( 'slug' ) );
91
+ foreach ( self::$products as $product ) {
92
+ if ( $params['slug'] === $product->get_slug() ) {
93
+ $products = array( $product );
94
+ break;
95
+ }
96
+ }
97
+ }
98
+ $response = array();
99
+ $custom_css = $this->has_custom_css();
100
+ if ( is_bool( $custom_css ) ) {
101
+ $response['custom_css'] = $custom_css;
102
+ }
103
+
104
+ $response['child_theme'] = $this->get_theme_properties();
105
+
106
+ foreach ( $products as $product ) {
107
+ $files = array();
108
+ switch ( $product->get_type() ) {
109
+ case 'plugin':
110
+ $files = array();
111
+ break;
112
+ case 'theme':
113
+ $files = array( 'style.css', 'functions.php' );
114
+ break;
115
+ }
116
+
117
+ $error = '';
118
+
119
+ // if any element in the $files array contains a '/', this would imply recursion is required.
120
+ $diff = $this->generate_diff( $product, $files, array_reduce( $files, array( $this, 'is_recursion_required' ), false ) );
121
+ if ( is_wp_error( $diff ) ) {
122
+ $error = $diff->get_error_message();
123
+ $diff = array();
124
+ }
125
+
126
+ $response['products'][] = array(
127
+ 'slug' => $product->get_slug(),
128
+ 'version' => $product->get_version(),
129
+ 'diffs' => $diff,
130
+ 'error' => $error,
131
+ );
132
+ }
133
+
134
+ return new WP_REST_Response( array( 'checksum' => $response ) );
135
+ }
136
+
137
+ /**
138
+ * Get the current theme properties.
139
+ *
140
+ * @return array Properties of the current theme.
141
+ */
142
+ function get_theme_properties() {
143
+ if ( ! is_child_theme() ) {
144
+ return false;
145
+ }
146
+
147
+ $properties = array();
148
+ $theme = wp_get_theme();
149
+ // @codingStandardsIgnoreStart
150
+ $properties['name'] = $theme->Name;
151
+ // @codingStandardsIgnoreEnd
152
+
153
+ // get the files in the child theme.
154
+ require_once( ABSPATH . 'wp-admin/includes/file.php' );
155
+ WP_Filesystem();
156
+ global $wp_filesystem;
157
+ $path = str_replace( ABSPATH, $wp_filesystem->abspath(), get_stylesheet_directory() );
158
+ $list = $wp_filesystem->dirlist( $path, false, false );
159
+ if ( $list ) {
160
+ $list = array_keys( self::flatten_dirlist( $list ) );
161
+ $properties['files'] = $list;
162
+ }
163
+ return $properties;
164
+ }
165
+
166
+ /**
167
+ * Check if custom css has been added to the theme.
168
+ *
169
+ * @return bool Whether custom css has been added to the theme.
170
+ */
171
+ private function has_custom_css() {
172
+ $query = new WP_Query(
173
+ array(
174
+ 'post_type' => 'custom_css',
175
+ 'post_status' => 'publish',
176
+ 'numberposts' => 1,
177
+ 'update_post_meta_cache' => false,
178
+ 'update_post_term_cache' => false,
179
+ )
180
+ );
181
+
182
+ if ( $query->have_posts() ) {
183
+ $query->the_post();
184
+ $content = get_the_content();
185
+ // if the content contains a colon, a CSS rule has been added.
186
+ return strpos( $content, ':' ) === false ? false : true;
187
+ }
188
+ return false;
189
+ }
190
+
191
+ /**
192
+ * Check if recursion needs to be enabled on the WP_Filesystem by reducing the array of files to a boolean.
193
+ *
194
+ * @param string $carry Value of the previous iteration.
195
+ * @param string $item Value of the current iteration.
196
+ *
197
+ * @return bool Whether to recurse or not.
198
+ */
199
+ function is_recursion_required( $carry, $item ) {
200
+ if ( ! $carry ) {
201
+ return ( strpos( $item, '/' ) !== false );
202
+ }
203
+ return $carry;
204
+ }
205
+
206
+ /**
207
+ * Generate the diff of the files.
208
+ *
209
+ * @param ThemeIsle_SDK_Product $product Themeisle Product.
210
+ * @param array $files Array of files.
211
+ * @param bool $recurse Whether to recurse or not.
212
+ *
213
+ * @return string
214
+ */
215
+ private function generate_diff( $product, $files, $recurse = false ) {
216
+ require_once( ABSPATH . 'wp-admin/includes/file.php' );
217
+ WP_Filesystem();
218
+ global $wp_filesystem;
219
+
220
+ $diff = array();
221
+ $path = str_replace( ABSPATH, $wp_filesystem->abspath(), plugin_dir_path( $product->get_basefile() ) );
222
+ $list = $wp_filesystem->dirlist( $path, false, $recurse );
223
+ // nothing found.
224
+ if ( ! $list ) {
225
+ return $diff;
226
+ }
227
+ $list = array_keys( self::flatten_dirlist( $list ) );
228
+
229
+ // now let's get the valid files that actually exist.
230
+ if ( empty( $files ) ) {
231
+ $files = $list;
232
+ } else {
233
+ $files = array_intersect( $files, $list );
234
+ }
235
+
236
+ // fetch the calculated hashes.
237
+ if ( ! $wp_filesystem->is_readable( $path . '/' . self::HASH_FILE ) ) {
238
+ return new WP_Error( 'themeisle_sdk_hash_not_found', sprintf( '%s not found', self::HASH_FILE ) );
239
+ }
240
+
241
+ $hashes = json_decode( $wp_filesystem->get_contents( $path . '/' . self::HASH_FILE ), true );
242
+ ksort( $hashes );
243
+
244
+ $diff = array();
245
+ foreach ( $files as $file ) {
246
+ // file does not exist in the hashes.
247
+ if ( ! array_key_exists( $file, $hashes ) ) {
248
+ continue;
249
+ }
250
+ $new = md5( $wp_filesystem->get_contents( $path . $file ) );
251
+ $old = $hashes[ $file ];
252
+
253
+ // same hash, bail.
254
+ if ( $new === $old ) {
255
+ continue;
256
+ }
257
+ $diff[] = $file;
258
+ }
259
+ return $diff;
260
+ }
261
+
262
+ /**
263
+ * Flatten the results of WP_Filesystem::dirlist() for iterating over.
264
+ *
265
+ * @access private
266
+ *
267
+ * @param array $nested_files Array of files as returned by WP_Filesystem::dirlist().
268
+ * @param string $path Relative path to prepend to child nodes. Optional.
269
+ * @return array $files A flattened array of the $nested_files specified.
270
+ */
271
+ private static function flatten_dirlist( $nested_files, $path = '' ) {
272
+ $files = array();
273
+ foreach ( $nested_files as $name => $details ) {
274
+ $files[ $path . $name ] = $details;
275
+ // Append children recursively
276
+ if ( ! empty( $details['files'] ) ) {
277
+ $children = self::flatten_dirlist( $details['files'], $path . $name . '/' );
278
+ // Merge keeping possible numeric keys, which array_merge() will reindex from 0..n
279
+ $files = $files + $children;
280
+ }
281
+ }
282
+ return $files;
283
+ }
284
+
285
+ /**
286
+ * Validates the parameters to the API
287
+ *
288
+ * @param WP_REST_Request $data the request.
289
+ * @param array $params the parameters to validate.
290
+ *
291
+ * @return array of parameter name=>value
292
+ */
293
+ private function validate_params( WP_REST_Request $data, $params ) {
294
+ $collect = array();
295
+ foreach ( $params as $param ) {
296
+ $value = sanitize_text_field( $data[ $param ] );
297
+ if ( empty( $value ) ) {
298
+ return new WP_Error(
299
+ 'themeisle_' . $param . '_invalid', sprintf( 'Invalid %', $param ), array(
300
+ 'status' => 403,
301
+ )
302
+ );
303
+ } else {
304
+ $collect[ $param ] = $value;
305
+ }
306
+ }
307
+
308
+ return $collect;
309
+ }
310
+
311
+ }
312
+ endif;
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-deactivate.php CHANGED
@@ -22,21 +22,15 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
22
  * @var array $options_plugin The main options list for plugins.
23
  */
24
  private $options_plugin = array(
25
- 'I only needed the plugin for a short period' => array(
26
- 'id' => 1,
27
- ),
28
- 'The plugin broke my site' => array(
29
- 'id' => 2,
30
- ),
31
- 'I found a better plugin' => array(
32
  'id' => 3,
33
  'type' => 'text',
34
  'placeholder' => 'What\'s the plugin\'s name?',
35
  ),
36
- 'The plugin suddenly stopped working' => array(
37
  'id' => 4,
38
  ),
39
- 'I no longer need the plugin' => array(
40
  'id' => 5,
41
  'type' => 'textarea',
42
  'placeholder' => 'If you could improve one thing about our product, what would it be?',
@@ -80,12 +74,12 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
80
  /**
81
  * @var string $heading_plugin The heading of the modal
82
  */
83
- private $heading_plugin = 'If you have a moment, please let us know why you are deactivating:';
84
 
85
  /**
86
  * @var string $heading_theme The heading of the modal
87
  */
88
- private $heading_theme = 'Looking to change {theme}, what doesn\'t work for you?';
89
 
90
  /**
91
  * @var string $button_submit_before The text of the deactivate button before an option is chosen
@@ -100,7 +94,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
100
  /**
101
  * @var string $button_cancel The text of the cancel button
102
  */
103
- private $button_cancel = 'Cancel';
104
 
105
  /**
106
  * @var int how many seconds before the deactivation window is triggered for themes
@@ -170,46 +164,110 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
170
  }
171
 
172
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_title {
173
- font-size: 21px;
174
- padding: 20px 0;
175
- background-color: #f3f3f3;
 
 
 
 
 
 
 
176
  }
177
 
178
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.actions {
179
- padding: 20px 0;
180
- background-color: #f3f3f3;
181
- border-top: 1px solid #dddddd;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  }
183
 
184
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary {
185
- margin-right: 20px;
 
 
 
 
 
 
 
 
 
186
  }
187
 
188
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button {
189
- margin-right: 20px;
190
  }
191
 
192
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_ajaxWindowTitle {
193
- text-align: left;
194
- margin-left: 15px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
195
  }
196
 
197
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.revive_network-container {
198
  background-color: #ffffff;
199
  }
200
 
 
 
 
 
201
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li {
202
- font-size: 14px;
 
 
203
  }
204
 
205
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li label {
206
  margin-left: 10px;
207
- line-height: 32px;
208
- font-size: 16px;
 
 
 
 
209
  }
210
 
211
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_ajaxContent {
212
- padding: 10px 20px;
 
 
 
213
  }
214
 
215
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container li div textarea {
@@ -222,24 +280,31 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
222
  }
223
 
224
  .<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle {
 
225
  display: block;
 
 
 
 
 
 
226
  }
227
 
228
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container .actions {
229
-
230
- width: 100%;
231
  display: block;
232
- position: absolute;
233
- left: 0px;
234
- bottom: 0px;
235
- text-align: right;
236
  }
237
 
238
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_title {
239
-
240
- height: 33px;
241
  width: 100%;
242
- text-align: center;
 
 
 
243
  }
244
 
245
  .theme-install-php .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
@@ -247,24 +312,40 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
247
  }
248
 
249
  .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
250
-
251
  color: #eee;
252
  }
253
 
254
  .<?php echo $key; ?>-container #TB_closeWindowButton {
255
  left: auto;
256
- right: -30px;
 
257
  color: #eee;
258
  }
259
 
260
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
 
 
262
  margin: auto !important;
263
- height: 550px !important;
264
  top: 0 !important;
265
  left: 0 !important;
266
  bottom: 0 !important;
267
  right: 0 !important;
 
268
  }
269
  </style>
270
  <?php
@@ -303,25 +384,29 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
303
  $('a.ti-auto-anchor').trigger('click');
304
  }, <?php echo self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000; ?> );
305
  }
306
- $( document ).on( 'thickbox:removed', function() {
307
  $.ajax({
308
  url: ajaxurl,
309
  method: 'post',
310
  data: {
311
- 'action' : '<?php echo $key . __CLASS__; ?>',
312
- 'nonce' : '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
313
- 'type' : '<?php echo $type; ?>',
314
- 'key' : '<?php echo $key; ?>'
315
  },
316
  });
317
  });
318
  var href = $(target_element).attr('href');
319
- $('#<?php echo $key; ?>ti-deactivate-no').on('click', function (e) {
320
  e.preventDefault();
321
  e.stopPropagation();
322
 
323
  $('body').unbind('thickbox:removed');
324
  tb_remove();
 
 
 
 
325
  });
326
 
327
  $('#<?php echo $key; ?> ul.ti-list label, #<?php echo $key; ?> ul.ti-list input[name="ti-deactivate-option"]').on('click', function (e) {
@@ -349,12 +434,12 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
349
  url: ajaxurl,
350
  method: 'post',
351
  data: {
352
- 'action' : '<?php echo $key . __CLASS__; ?>',
353
- 'nonce' : '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
354
- 'id' : $('#<?php echo $key; ?> input[name="ti-deactivate-option"]:checked').parent().attr('ti-option-id'),
355
- 'msg' : $('#<?php echo $key; ?> input[name="ti-deactivate-option"]:checked').parent().find('textarea').val(),
356
- 'type' : '<?php echo $type; ?>',
357
- 'key' : '<?php echo $key; ?>'
358
  },
359
  });
360
  var redirect = $(this).attr('data-ti-action');
@@ -366,7 +451,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
366
  }
367
  });
368
 
369
- $(target_element).attr('name', '<?php echo esc_html( $heading ); ?>').attr('href', '<?php echo $src; ?>').addClass('thickbox');
370
  var thicbox_timer;
371
  $(target_element).on('click', function () {
372
  tiBindThickbox();
@@ -409,10 +494,10 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
409
 
410
  $list = '';
411
  foreach ( $options as $title => $attributes ) {
412
- $id = $attributes['id'];
413
  $list .= '<li ti-option-id="' . $id . '"><input type="radio" name="ti-deactivate-option" id="' . $key . $id . '"><label for="' . $key . $id . '">' . str_replace( '{theme}', $this->product->get_name(), $title ) . '</label>';
414
  if ( array_key_exists( 'type', $attributes ) ) {
415
- $list .= '<div>';
416
  $placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
417
  switch ( $attributes['type'] ) {
418
  case 'text':
@@ -431,8 +516,9 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Deactivate' ) ) :
431
  . '<ul class="ti-list">' . $list . '</ul>'
432
  . '<div class="actions">'
433
  . get_submit_button(
434
- $button_submit_before, 'secondary', $this->product->get_key() . 'ti-deactivate-yes', false, array(
435
  'data-after-text' => $button_submit,
 
436
  )
437
  )
438
  . get_submit_button( $button_cancel, 'primary', $this->product->get_key() . 'ti-deactivate-no', false )
22
  * @var array $options_plugin The main options list for plugins.
23
  */
24
  private $options_plugin = array(
25
+ 'I found a better plugin' => array(
 
 
 
 
 
 
26
  'id' => 3,
27
  'type' => 'text',
28
  'placeholder' => 'What\'s the plugin\'s name?',
29
  ),
30
+ 'I could not get the plugin to work' => array(
31
  'id' => 4,
32
  ),
33
+ 'I no longer need the plugin' => array(
34
  'id' => 5,
35
  'type' => 'textarea',
36
  'placeholder' => 'If you could improve one thing about our product, what would it be?',
74
  /**
75
  * @var string $heading_plugin The heading of the modal
76
  */
77
+ private $heading_plugin = 'Quick Feedback <span>Because we care about our clients, please leave us a feedback.</span>';
78
 
79
  /**
80
  * @var string $heading_theme The heading of the modal
81
  */
82
+ private $heading_theme = 'Looking to change {theme} <span> What does not work for you?</span>';
83
 
84
  /**
85
  * @var string $button_submit_before The text of the deactivate button before an option is chosen
94
  /**
95
  * @var string $button_cancel The text of the cancel button
96
  */
97
+ private $button_cancel = 'Skip &amp; Deactivate';
98
 
99
  /**
100
  * @var int how many seconds before the deactivation window is triggered for themes
164
  }
165
 
166
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_title {
167
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDNkVDM0M4RkYxMzMxMUU3OEMyMkQ0NTIxRTVEQ0ZBRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDNkVDM0M5MEYxMzMxMUU3OEMyMkQ0NTIxRTVEQ0ZBRiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkM2RUMzQzhERjEzMzExRTc4QzIyRDQ1MjFFNURDRkFGIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkM2RUMzQzhFRjEzMzExRTc4QzIyRDQ1MjFFNURDRkFGIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+KBNOswAAFtFJREFUeNrkWwmUXVWV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') 40px 30px no-repeat;
168
+ border: none;
169
+ box-sizing: border-box;
170
+ color: #373e40;
171
+ font-size: 24px;
172
+ font-weight: 700;
173
+ height: 90px;
174
+ padding: 40px 40px 0 120px;
175
+ text-transform: uppercase;
176
+ width: 100%;
177
  }
178
 
179
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.actions {
180
+ box-sizing: border-box;
181
+ padding: 30px 40px;
182
+ background-color: #eaeaea;
183
+ }
184
+
185
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button {
186
+ background: #ec5d60;
187
+ border: none;
188
+ box-shadow: none;
189
+ color: #ffffff;
190
+ font-size: 15px;
191
+ font-weight: 700;
192
+ height: auto;
193
+ line-height: 20px;
194
+ padding: 10px 15px;
195
+ text-transform: uppercase;
196
+ -webkit-transition: 0.3s ease;
197
+ -moz-transition: 0.3s ease;
198
+ -ms-transition: 0.3s ease;
199
+ -o-transition: 0.3s ease;
200
+ transition: 0.3s ease;
201
  }
202
 
203
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary {
204
+ background: transparent;
205
+ box-shadow: none;
206
+ color: #8d9192;
207
+ font-weight: 400;
208
+ float: right;
209
+ line-height: 40px;
210
+ padding: 0;
211
+ text-decoration: underline;
212
+ text-shadow: none;
213
+ text-transform: none;
214
  }
215
 
216
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:hover {
217
+ background: #e83f42;
218
  }
219
 
220
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
221
+ background: transparent;
222
+ }
223
+
224
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:focus {
225
+ box-shadow: none;
226
+ outline: none;
227
+ }
228
+
229
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:active {
230
+ box-shadow: none;
231
+ transform: translateY(0);
232
+ }
233
+
234
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:disabled {
235
+ cursor: not-allowed;
236
+ }
237
+
238
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
239
+ text-decoration: none;
240
  }
241
 
242
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.revive_network-container {
243
  background-color: #ffffff;
244
  }
245
 
246
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list {
247
+ margin: 0;
248
+ }
249
+
250
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li {
251
+ color: #373e40;
252
+ font-size: 13px;
253
+ margin-bottom: 5px;
254
  }
255
 
256
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li label {
257
  margin-left: 10px;
258
+ line-height: 28px;
259
+ font-size: 15px;
260
+ }
261
+
262
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list input[type=radio] {
263
+ margin-top: 1px;
264
  }
265
 
266
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_ajaxContent {
267
+ box-sizing: border-box;
268
+ height: auto !important;
269
+ padding: 20px 40px;
270
+ width: 100% !important;
271
  }
272
 
273
  body.<?php echo $suffix; ?> .<?php echo $key; ?>-container li div textarea {
280
  }
281
 
282
  .<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle {
283
+ box-sizing: border-box;
284
  display: block;
285
+ float: none;
286
+ font-weight: 700;
287
+ line-height: 1;
288
+ padding: 0;
289
+ text-align: left;
290
+ width: 100%;
291
  }
292
 
293
+ .<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle span {
294
+ color: #8d9192;
 
295
  display: block;
296
+ font-size: 15px;
297
+ font-weight: 400;
298
+ margin-top: 5px;
299
+ text-transform: none;
300
  }
301
 
302
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container .actions {
 
 
303
  width: 100%;
304
+ display: block;
305
+ position: absolute;
306
+ left: 0;
307
+ bottom: 0;
308
  }
309
 
310
  .theme-install-php .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
312
  }
313
 
314
  .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
 
315
  color: #eee;
316
  }
317
 
318
  .<?php echo $key; ?>-container #TB_closeWindowButton {
319
  left: auto;
320
+ right: -5px;
321
+ top: -35px;
322
  color: #eee;
323
  }
324
 
325
+ .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
326
+ text-align: right;
327
+ line-height: 25px;
328
+ width: 25px;
329
+ height: 25px;
330
+ }
331
+
332
+ .<?php echo $key; ?>-container #TB_closeWindowButton:focus .tb-close-icon {
333
+ box-shadow: none;
334
+ outline: none;
335
+ }
336
+
337
+ .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
338
+ font: normal 25px dashicons;
339
+ }
340
 
341
+ body.<?php echo $suffix; ?> .<?php echo $key; ?>-container {
342
  margin: auto !important;
343
+ height: 500px !important;
344
  top: 0 !important;
345
  left: 0 !important;
346
  bottom: 0 !important;
347
  right: 0 !important;
348
+ width: 600px !important;
349
  }
350
  </style>
351
  <?php
384
  $('a.ti-auto-anchor').trigger('click');
385
  }, <?php echo self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000; ?> );
386
  }
387
+ $(document).on('thickbox:removed', function () {
388
  $.ajax({
389
  url: ajaxurl,
390
  method: 'post',
391
  data: {
392
+ 'action': '<?php echo $key . __CLASS__; ?>',
393
+ 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
394
+ 'type': '<?php echo $type; ?>',
395
+ 'key': '<?php echo $key; ?>'
396
  },
397
  });
398
  });
399
  var href = $(target_element).attr('href');
400
+ $('#<?php echo $key; ?>ti-deactivate-no').attr('data-ti-action', href).on('click', function (e) {
401
  e.preventDefault();
402
  e.stopPropagation();
403
 
404
  $('body').unbind('thickbox:removed');
405
  tb_remove();
406
+ var redirect = $(this).attr('data-ti-action');
407
+ if (redirect != '') {
408
+ location.href = redirect;
409
+ }
410
  });
411
 
412
  $('#<?php echo $key; ?> ul.ti-list label, #<?php echo $key; ?> ul.ti-list input[name="ti-deactivate-option"]').on('click', function (e) {
434
  url: ajaxurl,
435
  method: 'post',
436
  data: {
437
+ 'action': '<?php echo $key . __CLASS__; ?>',
438
+ 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
439
+ 'id': $('#<?php echo $key; ?> input[name="ti-deactivate-option"]:checked').parent().attr('ti-option-id'),
440
+ 'msg': $('#<?php echo $key; ?> input[name="ti-deactivate-option"]:checked').parent().find('textarea').val(),
441
+ 'type': '<?php echo $type; ?>',
442
+ 'key': '<?php echo $key; ?>'
443
  },
444
  });
445
  var redirect = $(this).attr('data-ti-action');
451
  }
452
  });
453
 
454
+ $(target_element).attr('name', '<?php echo wp_kses( $heading, array( 'span' => array() ) ); ?>').attr('href', '<?php echo $src; ?>').addClass('thickbox');
455
  var thicbox_timer;
456
  $(target_element).on('click', function () {
457
  tiBindThickbox();
494
 
495
  $list = '';
496
  foreach ( $options as $title => $attributes ) {
497
+ $id = $attributes['id'];
498
  $list .= '<li ti-option-id="' . $id . '"><input type="radio" name="ti-deactivate-option" id="' . $key . $id . '"><label for="' . $key . $id . '">' . str_replace( '{theme}', $this->product->get_name(), $title ) . '</label>';
499
  if ( array_key_exists( 'type', $attributes ) ) {
500
+ $list .= '<div>';
501
  $placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
502
  switch ( $attributes['type'] ) {
503
  case 'text':
516
  . '<ul class="ti-list">' . $list . '</ul>'
517
  . '<div class="actions">'
518
  . get_submit_button(
519
+ $button_submit, 'secondary', $this->product->get_key() . 'ti-deactivate-yes', false, array(
520
  'data-after-text' => $button_submit,
521
+ 'disabled' => true,
522
  )
523
  )
524
  . get_submit_button( $button_cancel, 'primary', $this->product->get_key() . 'ti-deactivate-no', false )
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-review.php CHANGED
@@ -146,7 +146,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Feedback_Review' ) ) :
146
  'action': '<?php echo $this->product->get_key() . __CLASS__; ?>'
147
  },
148
  success: function () {
149
- $('#<?php echo $key; ?>_review').hide();
150
  }
151
  });
152
  });
146
  'action': '<?php echo $this->product->get_key() . __CLASS__; ?>'
147
  },
148
  success: function () {
149
+ $('#<?php echo $key; ?>_review').html('<p><b>Thanks for your answer.</b></p>');
150
  }
151
  });
152
  });
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-feedback-translate.php CHANGED
@@ -888,7 +888,7 @@ The process is easy, and you can join by following the link below!';
888
  'action': '<?php echo $this->product->get_key() . __CLASS__; ?>'
889
  },
890
  success: function () {
891
- $('#<?php echo $key; ?>_translate').hide();
892
  }
893
  });
894
  });
888
  'action': '<?php echo $this->product->get_key() . __CLASS__; ?>'
889
  },
890
  success: function () {
891
+ $('#<?php echo $key; ?>_translate').html('<p><b>Thanks for your answer.</b></p>');
892
  }
893
  });
894
  });
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-licenser.php CHANGED
@@ -73,6 +73,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Licenser' ) ) :
73
  add_action( 'admin_init', array( $this, 'activate_license' ) );
74
  add_action( 'admin_init', array( $this, 'product_valid' ), 99999999 );
75
  add_action( 'admin_notices', array( $this, 'show_notice' ) );
 
76
  }
77
 
78
  /**
@@ -203,19 +204,6 @@ if ( ! class_exists( 'ThemeIsle_SDK_Licenser' ) ) :
203
  * @return bool Either hide them or not.
204
  */
205
  function check_hide( $hide ) {
206
- if ( isset( $_GET[ $this->product->get_key() . '_hide_' . $hide ] ) ) {
207
- if ( $_GET[ $this->product->get_key() . '_hide_' . $hide ] === 'yes' ) {
208
- update_option( $this->product->get_key() . '_hide_' . $hide, 'yes' );
209
-
210
- return false;
211
- }
212
- } else {
213
- $license = get_option( $this->product->get_key() . '_hide_' . $hide, '' );
214
- if ( $license === 'yes' ) {
215
- return false;
216
- }
217
- }
218
-
219
  return true;
220
  }
221
 
@@ -236,15 +224,14 @@ if ( ! class_exists( 'ThemeIsle_SDK_Licenser' ) ) :
236
  Staff for more details.'
237
  );
238
  $no_valid_string = apply_filters(
239
- $this->product->get_key() . '_lc_no_valid_string', 'In order to benefit from updates and support for %s , please add
240
  your license code from your <a href="%s" target="_blank">purchase history</a> and validate it <a
241
- href="%s">here</a> '
242
  );
243
  $expiration_string = apply_filters(
244
  $this->product->get_key() . '_lc_expiration_string', 'Your license is about to expire
245
  for %s. You can go to %s and renew it '
246
  );
247
- $hide_notice_string = apply_filters( $this->product->get_key() . '_lc_hide_notice_string', 'Hide Notice' );
248
  if ( $status != 'valid' ) {
249
  if ( $this->check_activation() ) {
250
  if ( $this->check_hide( 'activation' ) ) {
@@ -257,8 +244,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Licenser' ) ) :
257
  target="_blank">' . $this->product->get_store_name() . '</a>'
258
  );
259
  ?>
260
- </strong> | <a
261
- href="<?php echo add_query_arg( $this->product->get_key() . '_activation', 'yes' ); ?> "><?php echo $hide_notice_string; ?></a>
262
  </p>
263
  </div>
264
  <?php
@@ -269,9 +255,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Licenser' ) ) :
269
  <?php if ( $this->check_hide( 'valid' ) ) : ?>
270
  <div class="error">
271
  <p>
272
- <strong><?php echo sprintf( $no_valid_string, $this->product->get_name() . ' ' . $this->product->get_type(), $this->product->get_store_url(), admin_url( 'options-general.php' ) . '#' . $this->product->get_key() ); ?> </strong>|
273
- <a
274
- href="<?php echo add_query_arg( $this->product->get_key() . '_hide_valid', 'yes' ); ?> "><?php echo $hide_notice_string; ?></a>
275
  </p>
276
  </div>
277
  <?php endif; ?>
@@ -290,9 +274,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Licenser' ) ) :
290
  target="_blank">' . $this->product->get_store_name() . '</a>'
291
  );
292
  ?>
293
- </strong> |
294
- <a
295
- href="<?php echo add_query_arg( $this->product->get_key() . '_hide_expiration', 'yes' ); ?> "><?php echo $hide_notice_string; ?></a>
296
  </p>
297
  </div>
298
  <?php
73
  add_action( 'admin_init', array( $this, 'activate_license' ) );
74
  add_action( 'admin_init', array( $this, 'product_valid' ), 99999999 );
75
  add_action( 'admin_notices', array( $this, 'show_notice' ) );
76
+ add_filter( $this->product->get_key() . '_license_status', array( $this, 'get_license_status' ) );
77
  }
78
 
79
  /**
204
  * @return bool Either hide them or not.
205
  */
206
  function check_hide( $hide ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  return true;
208
  }
209
 
224
  Staff for more details.'
225
  );
226
  $no_valid_string = apply_filters(
227
+ $this->product->get_key() . '_lc_no_valid_string', 'In order to benefit from updates and support for %s, please add
228
  your license code from your <a href="%s" target="_blank">purchase history</a> and validate it <a
229
+ href="%s">here</a>. '
230
  );
231
  $expiration_string = apply_filters(
232
  $this->product->get_key() . '_lc_expiration_string', 'Your license is about to expire
233
  for %s. You can go to %s and renew it '
234
  );
 
235
  if ( $status != 'valid' ) {
236
  if ( $this->check_activation() ) {
237
  if ( $this->check_hide( 'activation' ) ) {
244
  target="_blank">' . $this->product->get_store_name() . '</a>'
245
  );
246
  ?>
247
+ </strong>
 
248
  </p>
249
  </div>
250
  <?php
255
  <?php if ( $this->check_hide( 'valid' ) ) : ?>
256
  <div class="error">
257
  <p>
258
+ <strong><?php echo sprintf( $no_valid_string, $this->product->get_name() . ' ' . $this->product->get_type(), $this->product->get_store_url(), admin_url( 'options-general.php' ) . '#' . $this->product->get_key() ); ?> </strong>
 
 
259
  </p>
260
  </div>
261
  <?php endif; ?>
274
  target="_blank">' . $this->product->get_store_name() . '</a>'
275
  );
276
  ?>
277
+ </strong>
 
 
278
  </p>
279
  </div>
280
  <?php
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-loader.php CHANGED
@@ -48,7 +48,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Loader' ) ) :
48
 
49
  $notifications = array();
50
  // Based on the WordPress Available file header we enable the logger or not.
51
- if ( ! $product_object->is_wordpress_available() ) {
52
  $licenser = new ThemeIsle_SDK_Licenser( $product_object );
53
  $licenser->enable();
54
  }
@@ -76,6 +76,9 @@ if ( ! class_exists( 'ThemeIsle_SDK_Loader' ) ) :
76
  if ( ! $product_object->is_external_author() ) {
77
  new ThemeIsle_SDK_Rollback( $product_object );
78
  }
 
 
 
79
  return self::$instance;
80
  }
81
 
48
 
49
  $notifications = array();
50
  // Based on the WordPress Available file header we enable the logger or not.
51
+ if ( ! $product_object->is_wordpress_available() && apply_filters( $product_object->get_key() . '_enable_licenser', true ) === true ) {
52
  $licenser = new ThemeIsle_SDK_Licenser( $product_object );
53
  $licenser->enable();
54
  }
76
  if ( ! $product_object->is_external_author() ) {
77
  new ThemeIsle_SDK_Rollback( $product_object );
78
  }
79
+
80
+ new ThemeIsle_SDK_Endpoints( $product_object );
81
+
82
  return self::$instance;
83
  }
84
 
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-logger.php CHANGED
@@ -77,6 +77,13 @@ if ( ! class_exists( 'ThemeIsle_SDK_Logger' ) ) :
77
  * Send the statistics to the api endpoint
78
  */
79
  public function send_log() {
 
 
 
 
 
 
 
80
  wp_remote_post(
81
  $this->logging_url, array(
82
  'method' => 'POST',
@@ -86,10 +93,12 @@ if ( ! class_exists( 'ThemeIsle_SDK_Logger' ) ) :
86
  'X-ThemeIsle-Event' => 'log_site',
87
  ),
88
  'body' => array(
89
- 'site' => get_site_url(),
90
- 'slug' => $this->product->get_slug(),
91
- 'version' => $this->product->get_version(),
92
- 'data' => apply_filters( $this->product->get_key() . '_logger_data', array() ),
 
 
93
  ),
94
  )
95
  );
77
  * Send the statistics to the api endpoint
78
  */
79
  public function send_log() {
80
+ $environment = array();
81
+ $theme = wp_get_theme();
82
+ $environment['theme'] = array();
83
+ $environment['theme']['name'] = $theme->get( 'Name' );
84
+ $environment['theme']['author'] = $theme->get( 'Author' );
85
+ $environment['plugins'] = get_option( 'active_plugins' );
86
+
87
  wp_remote_post(
88
  $this->logging_url, array(
89
  'method' => 'POST',
93
  'X-ThemeIsle-Event' => 'log_site',
94
  ),
95
  'body' => array(
96
+ 'site' => get_site_url(),
97
+ 'slug' => $this->product->get_slug(),
98
+ 'version' => $this->product->get_version(),
99
+ 'data' => apply_filters( $this->product->get_key() . '_logger_data', array() ),
100
+ 'environment' => $environment,
101
+ 'license' => apply_filters( $this->product->get_key() . '_license_status', '' ),
102
  ),
103
  )
104
  );
vendor/codeinwp/themeisle-sdk/class-themeisle-sdk-product.php CHANGED
@@ -60,7 +60,7 @@ if ( ! class_exists( 'ThemeIsle_SDK_Product' ) ) :
60
  /**
61
  * @var array $allowed_authors The allowed authors.
62
  */
63
- private $allowed_authors = array( 'proteusthemes.com', 'anarieldesign.com', 'prothemedesign.com' );
64
  /**
65
  * @var bool $requires_license Either user needs to activate it with license.
66
  */
60
  /**
61
  * @var array $allowed_authors The allowed authors.
62
  */
63
+ private $allowed_authors = array( 'proteusthemes.com', 'anarieldesign.com', 'prothemedesign.com', 'cssigniter.com' );
64
  /**
65
  * @var bool $requires_license Either user needs to activate it with license.
66
  */
vendor/codeinwp/themeisle-sdk/load.php CHANGED
@@ -11,7 +11,7 @@
11
  */
12
 
13
  // Current SDK version and path.
14
- $themeisle_sdk_version = '1.9.1';
15
  $themeisle_sdk_path = dirname( __FILE__ );
16
 
17
  global $themeisle_sdk_max_version;
11
  */
12
 
13
  // Current SDK version and path.
14
+ $themeisle_sdk_version = '2.1.1';
15
  $themeisle_sdk_path = dirname( __FILE__ );
16
 
17
  global $themeisle_sdk_max_version;
vendor/codeinwp/themeisle-sdk/start.php CHANGED
@@ -24,6 +24,7 @@ $files_to_load = array(
24
  'class-themeisle-sdk-widget.php',
25
  'class-themeisle-sdk-widget-dashboard-blog.php',
26
  'class-themeisle-sdk-widgets-factory.php',
 
27
  );
28
 
29
  foreach ( $files_to_load as $file ) {
24
  'class-themeisle-sdk-widget.php',
25
  'class-themeisle-sdk-widget-dashboard-blog.php',
26
  'class-themeisle-sdk-widgets-factory.php',
27
+ 'class-themeisle-sdk-endpoints.php',
28
  );
29
 
30
  foreach ( $files_to_load as $file ) {
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit715431a4486c2274dc1a3d8cb9376500
6
  {
7
  private static $loader;
8
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit715431a4486c2274dc1a3d8cb9376500
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit715431a4486c2274dc1a3d8cb9376500', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit715431a4486c2274dc1a3d8cb9376500', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@ class ComposerAutoloaderInit715431a4486c2274dc1a3d8cb9376500
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
- composerRequire715431a4486c2274dc1a3d8cb9376500($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
- function composerRequire715431a4486c2274dc1a3d8cb9376500($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInitfe5ae92a3fab081fcfe3c82ee105d10e
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInitfe5ae92a3fab081fcfe3c82ee105d10e', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInitfe5ae92a3fab081fcfe3c82ee105d10e', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
+ composerRequirefe5ae92a3fab081fcfe3c82ee105d10e($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
+ function composerRequirefe5ae92a3fab081fcfe3c82ee105d10e($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
vendor/composer/autoload_real_52.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
- class ComposerAutoloaderInit7834e6ad306641d049f3a4bade9cbd68 {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit7834e6ad306641d049f3a4bade9cbd68 {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit7834e6ad306641d049f3a4bade9cbd68', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit7834e6ad306641d049f3a4bade9cbd68', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
+ class ComposerAutoloaderInit8af7adeba1b95861ad18dfa88d59ccdf {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit8af7adeba1b95861ad18dfa88d59ccdf', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit8af7adeba1b95861ad18dfa88d59ccdf', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
vendor/composer/installed.json CHANGED
@@ -6,15 +6,15 @@
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
9
- "reference": "a05ab89594381a935573300f0aafdae8c28cefe5"
10
  },
11
  "dist": {
12
  "type": "zip",
13
- "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/a05ab89594381a935573300f0aafdae8c28cefe5",
14
- "reference": "a05ab89594381a935573300f0aafdae8c28cefe5",
15
  "shasum": ""
16
  },
17
- "time": "2017-11-13 10:52:46",
18
  "type": "library",
19
  "installation-source": "dist",
20
  "autoload": {
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
9
+ "reference": "9d866559c6090f0e7e70fe3e5a4be8672461a11a"
10
  },
11
  "dist": {
12
  "type": "zip",
13
+ "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/9d866559c6090f0e7e70fe3e5a4be8672461a11a",
14
+ "reference": "9d866559c6090f0e7e70fe3e5a4be8672461a11a",
15
  "shasum": ""
16
  },
17
+ "time": "2018-02-16 16:31:29",
18
  "type": "library",
19
  "installation-source": "dist",
20
  "autoload": {