All-in-One Video Gallery - Version 2.4.0

Version Description

  • New: Introduced player types (JavaScript, Iframe).
  • New: Introduced Video SEO.
  • Tweak: "Self Hosted / External URL" source type supports the relative file paths and the encoded (%20) file names.
  • Tweak: "Iframe Embed Code" source type supports non-iframe player embeds. Example: TikTok Videos.
  • Tweak: The "videos count" info on the categories page, includes the subcategory videos too.
  • Fix: Security Fix. Prevent XSS (Cross-Site Scripting) attempt on the title fields.
  • Fix: Conflict with the Autoptimize plugin.
  • Fix: [+] few minor bug fixes.
Download this release

Release Info

Developer plugins360
Plugin Icon 128x128 All-in-One Video Gallery
Version 2.4.0
Comparing to
See all releases

Code changes from version 2.3.0 to 2.4.0

Files changed (66) hide show
  1. README.txt +16 -6
  2. admin/admin.php +40 -18
  3. admin/partials/shortcode-builder.php +0 -1
  4. admin/partials/video-sources.php +10 -0
  5. admin/settings.php +113 -78
  6. admin/videos.php +11 -12
  7. all-in-one-video-gallery.php +2 -2
  8. blocks/blocks.php +4 -0
  9. freemius/assets/css/admin/account.css +1 -1
  10. freemius/assets/css/admin/common.css +2 -2
  11. freemius/assets/css/admin/connect.css +1 -1
  12. freemius/assets/css/admin/debug.css +1 -1
  13. freemius/assets/css/admin/dialog-boxes.css +1 -1
  14. freemius/assets/img/all-in-one-video-gallery.png +0 -0
  15. freemius/includes/class-freemius.php +618 -63
  16. freemius/includes/class-fs-plugin-updater.php +6 -0
  17. freemius/includes/class-fs-storage.php +11 -10
  18. freemius/includes/fs-essential-functions.php +5 -1
  19. freemius/languages/freemius-cs_CZ.mo +0 -0
  20. freemius/languages/freemius-cs_CZ.po +243 -457
  21. freemius/languages/freemius-da_DK.mo +0 -0
  22. freemius/languages/freemius-da_DK.po +468 -430
  23. freemius/languages/freemius-es_ES.mo +0 -0
  24. freemius/languages/freemius-es_ES.po +30 -30
  25. freemius/languages/freemius-it_IT.mo +0 -0
  26. freemius/languages/freemius-it_IT.po +62 -61
  27. freemius/languages/freemius-ja.mo +0 -0
  28. freemius/languages/{freemius-ja_JP.po → freemius-ja.po} +379 -166
  29. freemius/languages/freemius-ja_JP.mo +0 -0
  30. freemius/languages/freemius.pot +434 -361
  31. freemius/start.php +1 -1
  32. freemius/templates/account.php +38 -5
  33. freemius/templates/connect.php +76 -22
  34. freemius/templates/debug.php +13 -13
  35. freemius/templates/forms/deactivation/form.php +1 -1
  36. freemius/templates/forms/license-activation.php +865 -698
  37. freemius/templates/forms/optout.php +329 -269
  38. freemius/templates/forms/user-change.php +296 -0
  39. includes/functions.php +77 -85
  40. includes/init.php +15 -2
  41. includes/player.php +841 -0
  42. includes/uninstall.php +5 -5
  43. languages/all-in-one-video-gallery.pot +489 -425
  44. public/assets/css/public.css +171 -24
  45. public/assets/images/spinner-dark.gif +0 -0
  46. public/assets/images/spinner.gif +0 -0
  47. public/assets/js/player.js +302 -0
  48. public/assets/js/public.js +0 -13
  49. public/assets/player/videojs-plugins/dailymotion/videojs-dailymotion.min.js +2 -2
  50. public/assets/player/videojs-plugins/facebook/videojs-facebook.min.js +2 -2
  51. public/assets/player/videojs-plugins/vimeo/videojs-vimeo2.min.js +2 -2
  52. public/assets/player/videojs-plugins/youtube/Youtube.min.js +1 -1
  53. public/categories.php +12 -1
  54. public/conflict.php +43 -0
  55. public/public.php +163 -20
  56. public/templates/category-thumbnail.php +2 -2
  57. public/templates/player-amp.php +0 -258
  58. public/templates/player-gdpr.php +5 -5
  59. public/templates/player-html5.php +44 -32
  60. public/templates/player-iframe.php +37 -19
  61. public/templates/single-video.php +1 -1
  62. public/templates/video-thumbnail-image-left.php +1 -1
  63. public/templates/video-thumbnail.php +1 -1
  64. public/video.php +1 -1
  65. public/videos.php +28 -16
  66. widgets/videos.php +0 -1
README.txt CHANGED
@@ -4,9 +4,9 @@ Contributors: plugins360, wpvideogallery, freemius
4
  Donate link: https://plugins360.com
5
  Tags: video player, video gallery, youtube gallery, vimeo gallery, livestream
6
  Requires at least: 4.7.0
7
- Tested up to: 5.3
8
  Requires PHP: 5.3.0
9
- Stable tag: 2.3.0
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
@@ -42,6 +42,7 @@ https://www.youtube.com/watch?v=w47PU9ppuF8
42
 
43
  **Premium Features**
44
 
 
45
  * Auto Thumbnail Generator
46
  * Auto import videos from YouTube playlist, channel, etc.
47
  * Custom Logo & Branding
@@ -110,11 +111,21 @@ Please describe your issue and submit a ticket on our plugin support forum, you
110
 
111
  == Changelog ==
112
 
 
 
 
 
 
 
 
 
 
 
 
113
  = 2.3.0 =
114
 
115
  * Fix: Third-party videos like YouTube, Vimeo, Dailymotion & Facebook not working on iOS devices.
116
  * Fix: Video zoomed inside the player in IE.
117
- * Fix: Conflict with the Autoptimize plugin.
118
 
119
  = 2.2.0 =
120
 
@@ -149,7 +160,6 @@ Please describe your issue and submit a ticket on our plugin support forum, you
149
  * Tweak: Plugin backend access to users with the required capability.
150
  * Fix: M4V, MOV videos not working in the "AIOVG - Video Player" Gutenberg block.
151
  * Fix: WordPress 5.3 compatibility issues.
152
- * Fix: Autoptimize conflict issue.
153
  * Fix: [+] few minor bug fixes.
154
 
155
  = 1.6.5 =
@@ -271,6 +281,6 @@ Please describe your issue and submit a ticket on our plugin support forum, you
271
 
272
  == Upgrade Notice ==
273
 
274
- = 2.3.0 =
275
 
276
- Introduces few bug fixes. [See changelog](https://wordpress.org/plugins/all-in-one-video-gallery/#developers)
4
  Donate link: https://plugins360.com
5
  Tags: video player, video gallery, youtube gallery, vimeo gallery, livestream
6
  Requires at least: 4.7.0
7
+ Tested up to: 5.4
8
  Requires PHP: 5.3.0
9
+ Stable tag: 2.4.0
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
 
42
 
43
  **Premium Features**
44
 
45
+ * Video SEO: Schema.org Markup (via JSON-LD)
46
  * Auto Thumbnail Generator
47
  * Auto import videos from YouTube playlist, channel, etc.
48
  * Custom Logo & Branding
111
 
112
  == Changelog ==
113
 
114
+ = 2.4.0 =
115
+
116
+ * New: Introduced player types (JavaScript, Iframe).
117
+ * New: Introduced Video SEO.
118
+ * Tweak: "Self Hosted / External URL" source type supports the relative file paths and the encoded (%20) file names.
119
+ * Tweak: "Iframe Embed Code" source type supports non-iframe player embeds. Example: TikTok Videos.
120
+ * Tweak: The "videos count" info on the categories page, includes the subcategory videos too.
121
+ * Fix: Security Fix. Prevent XSS (Cross-Site Scripting) attempt on the title fields.
122
+ * Fix: Conflict with the Autoptimize plugin.
123
+ * Fix: [+] few minor bug fixes.
124
+
125
  = 2.3.0 =
126
 
127
  * Fix: Third-party videos like YouTube, Vimeo, Dailymotion & Facebook not working on iOS devices.
128
  * Fix: Video zoomed inside the player in IE.
 
129
 
130
  = 2.2.0 =
131
 
160
  * Tweak: Plugin backend access to users with the required capability.
161
  * Fix: M4V, MOV videos not working in the "AIOVG - Video Player" Gutenberg block.
162
  * Fix: WordPress 5.3 compatibility issues.
 
163
  * Fix: [+] few minor bug fixes.
164
 
165
  = 1.6.5 =
281
 
282
  == Upgrade Notice ==
283
 
284
+ = 2.4.0 =
285
 
286
+ Introduces several bug fixes, new features & enhancements. [See changelog](https://wordpress.org/plugins/all-in-one-video-gallery/#developers)
admin/admin.php CHANGED
@@ -32,20 +32,16 @@ class AIOVG_Admin {
32
 
33
  // Update the plugin version
34
  update_option( 'aiovg_version', AIOVG_PLUGIN_VERSION );
35
-
36
- // Insert the missing general settings
37
- $general_settings = get_option( 'aiovg_general_settings' );
38
-
39
- if ( ! array_key_exists( 'delete_media_files', $general_settings ) ) {
40
- $general_settings['delete_media_files'] = $defaults['aiovg_general_settings']['delete_media_files'];
41
- update_option( 'aiovg_general_settings', $general_settings );
42
- }
43
 
44
  // Insert the missing player settings
45
  $player_settings = get_option( 'aiovg_player_settings' );
46
 
47
  $new_player_settings = array();
48
 
 
 
 
 
49
  if ( ! array_key_exists( 'muted', $player_settings ) ) {
50
  $new_player_settings['muted'] = $defaults['aiovg_player_settings']['muted'];
51
  }
@@ -56,8 +52,25 @@ class AIOVG_Admin {
56
 
57
  if ( count( $new_player_settings ) ) {
58
  update_option( 'aiovg_player_settings', array_merge( $player_settings, $new_player_settings ) );
 
 
 
 
 
 
 
 
 
59
  }
60
-
 
 
 
 
 
 
 
 
61
  // Insert the missing categories settings
62
  $categories_settings = get_option( 'aiovg_categories_settings' );
63
 
@@ -75,23 +88,31 @@ class AIOVG_Admin {
75
  update_option( 'aiovg_categories_settings', array_merge( $categories_settings, $new_categories_settings ) );
76
  }
77
 
78
- // Insert the missing videos settings
79
- $videos_settings = get_option( 'aiovg_videos_settings' );
80
 
81
- $new_videos_settings = array();
82
 
83
- if ( ! array_key_exists( 'template', $videos_settings ) ) {
84
- $new_videos_settings['template'] = $defaults['aiovg_videos_settings']['template'];
85
  }
86
 
87
- if ( ! array_key_exists( 'thumbnail_style', $videos_settings ) ) {
88
- $new_videos_settings['thumbnail_style'] = $defaults['aiovg_videos_settings']['thumbnail_style'];
89
  }
90
 
91
- if ( count( $new_videos_settings ) ) {
92
- update_option( 'aiovg_videos_settings', array_merge( $videos_settings, $new_videos_settings ) );
93
  }
94
 
 
 
 
 
 
 
 
 
95
  // Insert the privacy settings
96
  if ( false == get_option( 'aiovg_privacy_settings' ) ) {
97
  add_option( 'aiovg_privacy_settings', $defaults['aiovg_privacy_settings'] );
@@ -154,6 +175,7 @@ class AIOVG_Admin {
154
  'aiovg_admin',
155
  array(
156
  'ajax_nonce' => wp_create_nonce( 'aiovg_ajax_nonce' ),
 
157
  'i18n' => array(
158
  'no_issues_slected' => __( 'Please select at least one issue.', 'all-in-one-video-gallery' )
159
  )
32
 
33
  // Update the plugin version
34
  update_option( 'aiovg_version', AIOVG_PLUGIN_VERSION );
 
 
 
 
 
 
 
 
35
 
36
  // Insert the missing player settings
37
  $player_settings = get_option( 'aiovg_player_settings' );
38
 
39
  $new_player_settings = array();
40
 
41
+ if ( ! array_key_exists( 'player', $player_settings ) ) {
42
+ $new_player_settings['player'] = 'iframe';
43
+ }
44
+
45
  if ( ! array_key_exists( 'muted', $player_settings ) ) {
46
  $new_player_settings['muted'] = $defaults['aiovg_player_settings']['muted'];
47
  }
52
 
53
  if ( count( $new_player_settings ) ) {
54
  update_option( 'aiovg_player_settings', array_merge( $player_settings, $new_player_settings ) );
55
+ }
56
+
57
+ // Insert the missing videos settings
58
+ $videos_settings = get_option( 'aiovg_videos_settings' );
59
+
60
+ $new_videos_settings = array();
61
+
62
+ if ( ! array_key_exists( 'template', $videos_settings ) ) {
63
+ $new_videos_settings['template'] = $defaults['aiovg_videos_settings']['template'];
64
  }
65
+
66
+ if ( ! array_key_exists( 'thumbnail_style', $videos_settings ) ) {
67
+ $new_videos_settings['thumbnail_style'] = $defaults['aiovg_videos_settings']['thumbnail_style'];
68
+ }
69
+
70
+ if ( count( $new_videos_settings ) ) {
71
+ update_option( 'aiovg_videos_settings', array_merge( $videos_settings, $new_videos_settings ) );
72
+ }
73
+
74
  // Insert the missing categories settings
75
  $categories_settings = get_option( 'aiovg_categories_settings' );
76
 
88
  update_option( 'aiovg_categories_settings', array_merge( $categories_settings, $new_categories_settings ) );
89
  }
90
 
91
+ // Insert the missing socialshare settings
92
+ $socialshare_settings = get_option( 'aiovg_socialshare_settings' );
93
 
94
+ $new_socialshare_settings = array();
95
 
96
+ if ( ! array_key_exists( 'open_graph_tags', $socialshare_settings ) ) {
97
+ $new_socialshare_settings['open_graph_tags'] = $defaults['aiovg_socialshare_settings']['open_graph_tags'];
98
  }
99
 
100
+ if ( ! array_key_exists( 'twitter_username', $socialshare_settings ) ) {
101
+ $new_socialshare_settings['twitter_username'] = $defaults['aiovg_socialshare_settings']['twitter_username'];
102
  }
103
 
104
+ if ( count( $new_socialshare_settings ) ) {
105
+ update_option( 'aiovg_socialshare_settings', array_merge( $socialshare_settings, $new_socialshare_settings ) );
106
  }
107
 
108
+ // Insert the missing general settings
109
+ $general_settings = get_option( 'aiovg_general_settings' );
110
+
111
+ if ( ! array_key_exists( 'delete_media_files', $general_settings ) ) {
112
+ $general_settings['delete_media_files'] = $defaults['aiovg_general_settings']['delete_media_files'];
113
+ update_option( 'aiovg_general_settings', $general_settings );
114
+ }
115
+
116
  // Insert the privacy settings
117
  if ( false == get_option( 'aiovg_privacy_settings' ) ) {
118
  add_option( 'aiovg_privacy_settings', $defaults['aiovg_privacy_settings'] );
175
  'aiovg_admin',
176
  array(
177
  'ajax_nonce' => wp_create_nonce( 'aiovg_ajax_nonce' ),
178
+ 'site_url' => esc_url_raw( get_site_url() ),
179
  'i18n' => array(
180
  'no_issues_slected' => __( 'Please select at least one issue.', 'all-in-one-video-gallery' )
181
  )
admin/partials/shortcode-builder.php CHANGED
@@ -16,7 +16,6 @@ $is_video_found = 0;
16
 
17
  $args = array(
18
  'post_type' => 'aiovg_videos',
19
- 'post_status' => 'publish',
20
  'posts_per_page' => 500,
21
  'orderby' => 'title',
22
  'order' => 'ASC',
16
 
17
  $args = array(
18
  'post_type' => 'aiovg_videos',
 
19
  'posts_per_page' => 500,
20
  'orderby' => 'title',
21
  'order' => 'ASC',
admin/partials/video-sources.php CHANGED
@@ -172,6 +172,16 @@
172
  </p>
173
 
174
  <textarea name="embedcode" id="aiovg-embedcode" class="textarea" rows="6" placeholder="<?php esc_attr_e( 'Enter your Iframe Embed Code', 'all-in-one-video-gallery' ); ?>"><?php echo esc_textarea( $embedcode ); ?></textarea>
 
 
 
 
 
 
 
 
 
 
175
  </td>
176
  </tr>
177
  <?php do_action( 'aiovg_admin_add_video_source_fields', $post->ID ); ?>
172
  </p>
173
 
174
  <textarea name="embedcode" id="aiovg-embedcode" class="textarea" rows="6" placeholder="<?php esc_attr_e( 'Enter your Iframe Embed Code', 'all-in-one-video-gallery' ); ?>"><?php echo esc_textarea( $embedcode ); ?></textarea>
175
+
176
+ <p>
177
+ <?php
178
+ printf(
179
+ '<span class="aiovg-text-error"><strong>%s</strong></span>: %s',
180
+ esc_html__( 'Warning', 'all-in-one-video-gallery' ),
181
+ esc_html__( 'This field allows "iframe" and "script" tags. So, make sure the code you\'re adding with this field is harmless to your website.', 'all-in-one-video-gallery' )
182
+ );
183
+ ?>
184
+ </p>
185
  </td>
186
  </tr>
187
  <?php do_action( 'aiovg_admin_add_video_source_fields', $post->ID ); ?>
admin/settings.php CHANGED
@@ -96,7 +96,8 @@ class AIOVG_Admin_Settings {
96
  public function get_tabs() {
97
  $tabs = array(
98
  'general' => __( 'General', 'all-in-one-video-gallery' ),
99
- 'display' => __( 'Display', 'all-in-one-video-gallery' ),
 
100
  'advanced' => __( 'Advanced', 'all-in-one-video-gallery' )
101
  );
102
 
@@ -110,52 +111,59 @@ class AIOVG_Admin_Settings {
110
  * @return array $sections Setting sections array.
111
  */
112
  public function get_sections() {
113
- $sections = array(
114
- array(
115
- 'id' => 'aiovg_general_settings',
116
- 'title' => __( 'General Settings', 'all-in-one-video-gallery' ),
117
- 'tab' => 'general'
118
- ),
119
  array(
120
- 'id' => 'aiovg_player_settings',
121
- 'title' => __( 'Player Settings', 'all-in-one-video-gallery' ),
122
- 'tab' => 'general'
 
123
  ),
124
  array(
125
- 'id' => 'aiovg_videos_settings',
126
- 'title' => __( 'Videos Layout', 'all-in-one-video-gallery' ),
127
- 'tab' => 'display'
 
128
  ),
129
  array(
130
- 'id' => 'aiovg_categories_settings',
131
- 'title' => __( 'Categories Layout', 'all-in-one-video-gallery' ),
132
- 'tab' => 'display'
 
133
  ),
134
  array(
135
- 'id' => 'aiovg_video_settings',
136
- 'title' => __( 'Single Video Page', 'all-in-one-video-gallery' ),
137
- 'tab' => 'display'
 
138
  ),
139
  array(
140
- 'id' => 'aiovg_image_settings',
141
- 'title' => __( 'Image Settings', 'all-in-one-video-gallery' ),
142
- 'tab' => 'display'
 
143
  ),
144
  array(
145
- 'id' => 'aiovg_page_settings',
146
- 'title' => __( 'Page Settings', 'all-in-one-video-gallery' ),
147
- 'tab' => 'advanced'
148
- ),
 
149
  array(
150
  'id' => 'aiovg_permalink_settings',
151
  'title' => __( 'Permalink Slugs', 'all-in-one-video-gallery' ),
152
  'description' => __( 'NOTE: Just make sure that, after updating the fields in this section, you flush the rewrite rules by visiting "Settings > Permalinks". Otherwise you\'ll still see the old links.', 'all-in-one-video-gallery' ),
 
 
 
 
 
 
153
  'tab' => 'advanced'
154
  ),
155
- array(
156
- 'id' => 'aiovg_socialshare_settings',
157
- 'title' => __( 'Socialshare Buttons', 'all-in-one-video-gallery' ),
158
- 'description' => __( 'Select social share buttons displayed in the single video pages.', 'all-in-one-video-gallery' ),
159
  'tab' => 'advanced'
160
  ),
161
  array(
@@ -168,9 +176,10 @@ class AIOVG_Admin_Settings {
168
 
169
  if ( false !== get_option( 'aiovg_brand_settings' ) ) {
170
  $sections[] = array(
171
- 'id' => 'aiovg_brand_settings',
172
- 'title' => __( 'Logo & Branding', 'all-in-one-video-gallery' ),
173
- 'tab' => 'general'
 
174
  );
175
  }
176
 
@@ -186,24 +195,19 @@ class AIOVG_Admin_Settings {
186
  public function get_fields() {
187
  $video_templates = aiovg_get_video_templates();
188
 
189
- $fields = array(
190
- 'aiovg_general_settings' => array(
191
- array(
192
- 'name' => 'delete_plugin_data',
193
- 'label' => __( 'Remove data on uninstall?', 'all-in-one-video-gallery' ),
194
- 'description' => __( 'Check this box to delete all of the plugin data (database stored content) when uninstalled', 'all-in-one-video-gallery' ),
195
- 'type' => 'checkbox',
196
- 'sanitize_callback' => 'intval'
197
- ),
198
- array(
199
- 'name' => 'delete_media_files',
200
- 'label' => __( 'Delete media files?', 'all-in-one-video-gallery' ),
201
- 'description' => __( 'Check this box to also delete the associated media files when a video post or a video category is deleted', 'all-in-one-video-gallery' ),
202
- 'type' => 'checkbox',
203
- 'sanitize_callback' => 'intval'
204
- )
205
- ),
206
  'aiovg_player_settings' => array(
 
 
 
 
 
 
 
 
 
 
 
207
  array(
208
  'name' => 'width',
209
  'label' => __( 'Width', 'all-in-one-video-gallery' ),
@@ -496,6 +500,62 @@ class AIOVG_Admin_Settings {
496
  'sanitize_callback' => 'floatval'
497
  ),
498
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
499
  'aiovg_page_settings' => array(
500
  array(
501
  'name' => 'category',
@@ -525,32 +585,7 @@ class AIOVG_Admin_Settings {
525
  'type' => 'pages',
526
  'sanitize_callback' => 'sanitize_key'
527
  )
528
- ),
529
- 'aiovg_permalink_settings' => array(
530
- array(
531
- 'name' => 'video',
532
- 'label' => __( 'Video Detail Page', 'all-in-one-video-gallery' ),
533
- 'description' => __( 'Replaces the SLUG value used by custom post type "aiovg_videos".', 'all-in-one-video-gallery' ),
534
- 'type' => 'text',
535
- 'sanitize_callback' => 'sanitize_text_field'
536
- )
537
- ),
538
- 'aiovg_socialshare_settings' => array(
539
- array(
540
- 'name' => 'services',
541
- 'label' => __( 'Enable Services', 'all-in-one-video-gallery' ),
542
- 'description' => '',
543
- 'type' => 'multicheck',
544
- 'options' => array(
545
- 'facebook' => __( 'Facebook', 'all-in-one-video-gallery' ),
546
- 'twitter' => __( 'Twitter', 'all-in-one-video-gallery' ),
547
- 'linkedin' => __( 'Linkedin', 'all-in-one-video-gallery' ),
548
- 'pinterest' => __( 'Pinterest', 'all-in-one-video-gallery' ),
549
- 'whatsapp' => __( 'WhatsApp', 'all-in-one-video-gallery' )
550
- ),
551
- 'sanitize_callback' => 'aiovg_sanitize_array'
552
- )
553
- ),
554
  'aiovg_privacy_settings' => array(
555
  array(
556
  'name' => 'show_consent',
@@ -590,7 +625,7 @@ class AIOVG_Admin_Settings {
590
  'label' => __( 'Logo Image', 'all-in-one-video-gallery' ),
591
  'description' => __( 'Upload the image file of your logo. We recommend using the transparent PNG format with width below 100 pixels. If you do not enter any image, no logo will displayed.', 'all-in-one-video-gallery' ),
592
  'type' => 'file',
593
- 'sanitize_callback' => 'esc_url_raw'
594
  ),
595
  array(
596
  'name' => 'logo_link',
@@ -699,7 +734,7 @@ class AIOVG_Admin_Settings {
699
  public function settings_section_callback( $args ) {
700
  foreach ( $this->sections as $section ) {
701
  if ( $section['id'] == $args['id'] ) {
702
- printf( '<div class="inside">%s</div>', sanitize_text_field( $section['description'] ) );
703
  break;
704
  }
705
  }
96
  public function get_tabs() {
97
  $tabs = array(
98
  'general' => __( 'General', 'all-in-one-video-gallery' ),
99
+ 'display' => __( 'Display', 'all-in-one-video-gallery' ),
100
+ 'seo' => __( 'SEO', 'all-in-one-video-gallery' ),
101
  'advanced' => __( 'Advanced', 'all-in-one-video-gallery' )
102
  );
103
 
111
  * @return array $sections Setting sections array.
112
  */
113
  public function get_sections() {
114
+ $sections = array(
 
 
 
 
 
115
  array(
116
+ 'id' => 'aiovg_player_settings',
117
+ 'title' => __( 'Player Settings', 'all-in-one-video-gallery' ),
118
+ 'description' => '',
119
+ 'tab' => 'general'
120
  ),
121
  array(
122
+ 'id' => 'aiovg_videos_settings',
123
+ 'title' => __( 'Videos Layout', 'all-in-one-video-gallery' ),
124
+ 'description' => '',
125
+ 'tab' => 'display'
126
  ),
127
  array(
128
+ 'id' => 'aiovg_categories_settings',
129
+ 'title' => __( 'Categories Layout', 'all-in-one-video-gallery' ),
130
+ 'description' => '',
131
+ 'tab' => 'display'
132
  ),
133
  array(
134
+ 'id' => 'aiovg_video_settings',
135
+ 'title' => __( 'Single Video Page', 'all-in-one-video-gallery' ),
136
+ 'description' => '',
137
+ 'tab' => 'display'
138
  ),
139
  array(
140
+ 'id' => 'aiovg_image_settings',
141
+ 'title' => __( 'Image Settings', 'all-in-one-video-gallery' ),
142
+ 'description' => '',
143
+ 'tab' => 'display'
144
  ),
145
  array(
146
+ 'id' => 'aiovg_socialshare_settings',
147
+ 'title' => __( 'Social Sharing', 'all-in-one-video-gallery' ),
148
+ 'description' => '',
149
+ 'tab' => 'seo'
150
+ ),
151
  array(
152
  'id' => 'aiovg_permalink_settings',
153
  'title' => __( 'Permalink Slugs', 'all-in-one-video-gallery' ),
154
  'description' => __( 'NOTE: Just make sure that, after updating the fields in this section, you flush the rewrite rules by visiting "Settings > Permalinks". Otherwise you\'ll still see the old links.', 'all-in-one-video-gallery' ),
155
+ 'tab' => 'seo'
156
+ ),
157
+ array(
158
+ 'id' => 'aiovg_general_settings',
159
+ 'title' => __( 'Misc Settings', 'all-in-one-video-gallery' ),
160
+ 'description' => '',
161
  'tab' => 'advanced'
162
  ),
163
+ array(
164
+ 'id' => 'aiovg_page_settings',
165
+ 'title' => __( 'Page Settings', 'all-in-one-video-gallery' ),
166
+ 'description' => '',
167
  'tab' => 'advanced'
168
  ),
169
  array(
176
 
177
  if ( false !== get_option( 'aiovg_brand_settings' ) ) {
178
  $sections[] = array(
179
+ 'id' => 'aiovg_brand_settings',
180
+ 'title' => __( 'Logo & Branding', 'all-in-one-video-gallery' ),
181
+ 'description' => '',
182
+ 'tab' => 'general'
183
  );
184
  }
185
 
195
  public function get_fields() {
196
  $video_templates = aiovg_get_video_templates();
197
 
198
+ $fields = array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  'aiovg_player_settings' => array(
200
+ array(
201
+ 'name' => 'player',
202
+ 'label' => __( 'Player Type', 'all-in-one-video-gallery' ),
203
+ 'description' => '',
204
+ 'type' => 'radio',
205
+ 'options' => array(
206
+ 'standard' => __( 'JavaScript', 'all-in-one-video-gallery' ),
207
+ 'iframe' => __( 'Iframe', 'all-in-one-video-gallery' )
208
+ ),
209
+ 'sanitize_callback' => 'sanitize_key'
210
+ ),
211
  array(
212
  'name' => 'width',
213
  'label' => __( 'Width', 'all-in-one-video-gallery' ),
500
  'sanitize_callback' => 'floatval'
501
  ),
502
  ),
503
+ 'aiovg_socialshare_settings' => array(
504
+ array(
505
+ 'name' => 'services',
506
+ 'label' => __( 'Share Buttons', 'all-in-one-video-gallery' ),
507
+ 'description' => __( 'Select social share buttons displayed on the single video pages.', 'all-in-one-video-gallery' ),
508
+ 'type' => 'multicheck',
509
+ 'options' => array(
510
+ 'facebook' => __( 'Facebook', 'all-in-one-video-gallery' ),
511
+ 'twitter' => __( 'Twitter', 'all-in-one-video-gallery' ),
512
+ 'linkedin' => __( 'Linkedin', 'all-in-one-video-gallery' ),
513
+ 'pinterest' => __( 'Pinterest', 'all-in-one-video-gallery' ),
514
+ 'whatsapp' => __( 'WhatsApp', 'all-in-one-video-gallery' )
515
+ ),
516
+ 'sanitize_callback' => 'aiovg_sanitize_array'
517
+ ),
518
+ array(
519
+ 'name' => 'open_graph_tags',
520
+ 'label' => __( 'Open Graph Tags', 'all-in-one-video-gallery' ),
521
+ 'description' => __( 'Check this option to enable Facebook Open Graph meta tags and Twitter cards on the single video pages', 'all-in-one-video-gallery' ),
522
+ 'type' => 'checkbox',
523
+ 'sanitize_callback' => 'intval'
524
+ ),
525
+ array(
526
+ 'name' => 'twitter_username',
527
+ 'label' => __( 'Twitter Username', 'all-in-one-video-gallery' ),
528
+ 'description' => __( 'The Twitter @username the player card should be attributed to. Required for sharing videos in Twitter.', 'all-in-one-video-gallery' ),
529
+ 'placeholder' => '@username',
530
+ 'type' => 'text',
531
+ 'sanitize_callback' => 'sanitize_text_field'
532
+ )
533
+ ),
534
+ 'aiovg_permalink_settings' => array(
535
+ array(
536
+ 'name' => 'video',
537
+ 'label' => __( 'Video Detail Page', 'all-in-one-video-gallery' ),
538
+ 'description' => __( 'Replaces the SLUG value used by custom post type "aiovg_videos".', 'all-in-one-video-gallery' ),
539
+ 'type' => 'text',
540
+ 'sanitize_callback' => 'sanitize_text_field'
541
+ )
542
+ ),
543
+ 'aiovg_general_settings' => array(
544
+ array(
545
+ 'name' => 'delete_plugin_data',
546
+ 'label' => __( 'Remove data on uninstall?', 'all-in-one-video-gallery' ),
547
+ 'description' => __( 'Check this box to delete all of the plugin data (database stored content) when uninstalled', 'all-in-one-video-gallery' ),
548
+ 'type' => 'checkbox',
549
+ 'sanitize_callback' => 'intval'
550
+ ),
551
+ array(
552
+ 'name' => 'delete_media_files',
553
+ 'label' => __( 'Delete media files?', 'all-in-one-video-gallery' ),
554
+ 'description' => __( 'Check this box to also delete the associated media files when a video post or a video category is deleted', 'all-in-one-video-gallery' ),
555
+ 'type' => 'checkbox',
556
+ 'sanitize_callback' => 'intval'
557
+ )
558
+ ),
559
  'aiovg_page_settings' => array(
560
  array(
561
  'name' => 'category',
585
  'type' => 'pages',
586
  'sanitize_callback' => 'sanitize_key'
587
  )
588
+ ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
589
  'aiovg_privacy_settings' => array(
590
  array(
591
  'name' => 'show_consent',
625
  'label' => __( 'Logo Image', 'all-in-one-video-gallery' ),
626
  'description' => __( 'Upload the image file of your logo. We recommend using the transparent PNG format with width below 100 pixels. If you do not enter any image, no logo will displayed.', 'all-in-one-video-gallery' ),
627
  'type' => 'file',
628
+ 'sanitize_callback' => 'aiovg_sanitize_url'
629
  ),
630
  array(
631
  'name' => 'logo_link',
734
  public function settings_section_callback( $args ) {
735
  foreach ( $this->sections as $section ) {
736
  if ( $section['id'] == $args['id'] ) {
737
+ printf( '<div class="inside">%s</div>', $section['description'] );
738
  break;
739
  }
740
  }
admin/videos.php CHANGED
@@ -107,8 +107,9 @@ class AIOVG_Admin_Videos {
107
  'hierarchical' => false,
108
  'public' => true,
109
  'show_ui' => true,
110
- 'show_in_admin_bar' => true,
111
  'show_in_nav_menus' => false,
 
112
  'show_in_rest' => false,
113
  'can_export' => true,
114
  'has_archive' => true,
@@ -118,9 +119,7 @@ class AIOVG_Admin_Videos {
118
  'map_meta_cap' => true,
119
  );
120
 
121
- if ( current_user_can( 'administrator' ) ) {
122
- $args['show_in_menu'] = false;
123
- } else {
124
  $args['show_in_menu'] = true;
125
  $args['menu_position'] = 5;
126
  $args['menu_icon'] = 'dashicons-playlist-video';
@@ -270,21 +269,21 @@ class AIOVG_Admin_Videos {
270
  $type = isset( $_POST['type'] ) ? sanitize_text_field( $_POST['type'] ) : 'default';
271
  update_post_meta( $post_id, 'type', $type );
272
 
273
- $mp4 = isset( $_POST['mp4'] ) ? sanitize_text_field( $_POST['mp4'] ) : '';
274
  update_post_meta( $post_id, 'mp4', $mp4 );
275
  update_post_meta( $post_id, 'mp4_id', aiovg_get_attachment_id( $mp4, 'video' ) );
276
 
277
  $has_webm = isset( $_POST['has_webm'] ) ? 1 : 0;
278
  update_post_meta( $post_id, 'has_webm', $has_webm );
279
 
280
- $webm = isset( $_POST['webm'] ) ? sanitize_text_field( $_POST['webm'] ) : '';
281
  update_post_meta( $post_id, 'webm', $webm );
282
  update_post_meta( $post_id, 'webm_id', aiovg_get_attachment_id( $webm, 'video' ) );
283
 
284
  $has_ogv = isset( $_POST['has_ogv'] ) ? 1 : 0;
285
  update_post_meta( $post_id, 'has_ogv', $has_ogv );
286
 
287
- $ogv = isset( $_POST['ogv'] ) ? sanitize_text_field( $_POST['ogv'] ) : '';
288
  update_post_meta( $post_id, 'ogv', $ogv );
289
  update_post_meta( $post_id, 'ogv_id', aiovg_get_attachment_id( $ogv, 'video' ) );
290
 
@@ -305,15 +304,15 @@ class AIOVG_Admin_Videos {
305
  $facebook = isset( $_POST['facebook'] ) ? esc_url_raw( $_POST['facebook'] ) : '';
306
  update_post_meta( $post_id, 'facebook', $facebook );
307
 
308
- add_filter( 'wp_kses_allowed_html', 'aiovg_allow_iframes_filter' );
309
- $embedcode = isset( $_POST['embedcode'] ) ? wp_kses_post( $_POST['embedcode'] ) : '';
310
  update_post_meta( $post_id, 'embedcode', $embedcode );
311
- remove_filter( 'wp_kses_allowed_html', 'aiovg_allow_iframes_filter' );
312
 
313
  $image = '';
314
  $image_id = 0;
315
  if ( ! empty( $_POST['image'] ) ) {
316
- $image = sanitize_text_field( $_POST['image'] );
317
  $image_id = aiovg_get_attachment_id( $image, 'image' );
318
  } else {
319
  if ( 'youtube' == $type && ! empty( $youtube ) ) {
@@ -351,7 +350,7 @@ class AIOVG_Admin_Videos {
351
 
352
  foreach ( $sources as $key => $source ) {
353
  $track = array(
354
- 'src' => sanitize_text_field( $source ),
355
  'src_id' => aiovg_get_attachment_id( $source, 'track' ),
356
  'label' => sanitize_text_field( $_POST['track_label'][ $key ] ),
357
  'srclang' => sanitize_text_field( $_POST['track_srclang'][ $key ] )
107
  'hierarchical' => false,
108
  'public' => true,
109
  'show_ui' => true,
110
+ 'show_in_menu' => false,
111
  'show_in_nav_menus' => false,
112
+ 'show_in_admin_bar' => true,
113
  'show_in_rest' => false,
114
  'can_export' => true,
115
  'has_archive' => true,
119
  'map_meta_cap' => true,
120
  );
121
 
122
+ if ( current_user_can( 'editor' ) ) {
 
 
123
  $args['show_in_menu'] = true;
124
  $args['menu_position'] = 5;
125
  $args['menu_icon'] = 'dashicons-playlist-video';
269
  $type = isset( $_POST['type'] ) ? sanitize_text_field( $_POST['type'] ) : 'default';
270
  update_post_meta( $post_id, 'type', $type );
271
 
272
+ $mp4 = isset( $_POST['mp4'] ) ? aiovg_sanitize_url( $_POST['mp4'] ) : '';
273
  update_post_meta( $post_id, 'mp4', $mp4 );
274
  update_post_meta( $post_id, 'mp4_id', aiovg_get_attachment_id( $mp4, 'video' ) );
275
 
276
  $has_webm = isset( $_POST['has_webm'] ) ? 1 : 0;
277
  update_post_meta( $post_id, 'has_webm', $has_webm );
278
 
279
+ $webm = isset( $_POST['webm'] ) ? aiovg_sanitize_url( $_POST['webm'] ) : '';
280
  update_post_meta( $post_id, 'webm', $webm );
281
  update_post_meta( $post_id, 'webm_id', aiovg_get_attachment_id( $webm, 'video' ) );
282
 
283
  $has_ogv = isset( $_POST['has_ogv'] ) ? 1 : 0;
284
  update_post_meta( $post_id, 'has_ogv', $has_ogv );
285
 
286
+ $ogv = isset( $_POST['ogv'] ) ? aiovg_sanitize_url( $_POST['ogv'] ) : '';
287
  update_post_meta( $post_id, 'ogv', $ogv );
288
  update_post_meta( $post_id, 'ogv_id', aiovg_get_attachment_id( $ogv, 'video' ) );
289
 
304
  $facebook = isset( $_POST['facebook'] ) ? esc_url_raw( $_POST['facebook'] ) : '';
305
  update_post_meta( $post_id, 'facebook', $facebook );
306
 
307
+ add_filter( 'wp_kses_allowed_html', 'aiovg_allow_iframe_script_tags' );
308
+ $embedcode = isset( $_POST['embedcode'] ) ? wp_kses_post( str_replace( "'", '"', $_POST['embedcode'] ) ) : '';
309
  update_post_meta( $post_id, 'embedcode', $embedcode );
310
+ remove_filter( 'wp_kses_allowed_html', 'aiovg_allow_iframe_script_tags' );
311
 
312
  $image = '';
313
  $image_id = 0;
314
  if ( ! empty( $_POST['image'] ) ) {
315
+ $image = aiovg_sanitize_url( $_POST['image'] );
316
  $image_id = aiovg_get_attachment_id( $image, 'image' );
317
  } else {
318
  if ( 'youtube' == $type && ! empty( $youtube ) ) {
350
 
351
  foreach ( $sources as $key => $source ) {
352
  $track = array(
353
+ 'src' => aiovg_sanitize_url( $source ),
354
  'src_id' => aiovg_get_attachment_id( $source, 'track' ),
355
  'label' => sanitize_text_field( $_POST['track_label'][ $key ] ),
356
  'srclang' => sanitize_text_field( $_POST['track_srclang'][ $key ] )
all-in-one-video-gallery.php CHANGED
@@ -11,7 +11,7 @@
11
  * Plugin Name: All-in-One Video Gallery
12
  * Plugin URI: https://plugins360.com/all-in-one-video-gallery/
13
  * Description: No coding required. A Responsive & Lightweight video gallery plugin. HTML5 Player, Categories, Visual Builder (Gutenberg), Search Form, Comments, Social Sharing and everything you will need to build a YouTube/Vimeo like video sharing website.
14
- * Version: 2.3.0
15
  * Author: Team Plugins360
16
  * Author URI: https://plugins360.com
17
  * License: GPL-2.0+
@@ -76,7 +76,7 @@ if ( !function_exists( 'aiovg_fs' ) ) {
76
 
77
  // The current version of the plugin
78
  if ( !defined( 'AIOVG_PLUGIN_VERSION' ) ) {
79
- define( 'AIOVG_PLUGIN_VERSION', '2.3.0' );
80
  }
81
  // The unique identifier of the plugin
82
  if ( !defined( 'AIOVG_PLUGIN_SLUG' ) ) {
11
  * Plugin Name: All-in-One Video Gallery
12
  * Plugin URI: https://plugins360.com/all-in-one-video-gallery/
13
  * Description: No coding required. A Responsive & Lightweight video gallery plugin. HTML5 Player, Categories, Visual Builder (Gutenberg), Search Form, Comments, Social Sharing and everything you will need to build a YouTube/Vimeo like video sharing website.
14
+ * Version: 2.4.0
15
  * Author: Team Plugins360
16
  * Author URI: https://plugins360.com
17
  * License: GPL-2.0+
76
 
77
  // The current version of the plugin
78
  if ( !defined( 'AIOVG_PLUGIN_VERSION' ) ) {
79
+ define( 'AIOVG_PLUGIN_VERSION', '2.4.0' );
80
  }
81
  // The unique identifier of the plugin
82
  if ( !defined( 'AIOVG_PLUGIN_SLUG' ) ) {
blocks/blocks.php CHANGED
@@ -433,6 +433,10 @@ class AIOVG_Blocks {
433
  }
434
  }
435
 
 
 
 
 
436
  unset( $atts['src'] );
437
 
438
  foreach ( $atts as $key => $value ) {
433
  }
434
  }
435
 
436
+ if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
437
+ $atts['player'] = 'iframe';
438
+ }
439
+
440
  unset( $atts['src'] );
441
 
442
  foreach ( $atts as $key => $value ) {
freemius/assets/css/admin/account.css CHANGED
@@ -1 +1 @@
1
- label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}#fs_account .postbox,#fs_account .widefat{max-width:700px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type="text"]{color:#0073AA;font-size:16px;background:none}.fs-key-value-table input[type="text"]{width:100%;font-weight:bold}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:grey;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}
1
+ label.fs-tag,span.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn,span.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-info,span.fs-tag.fs-info{background:#00a0d2}label.fs-tag.fs-success,span.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error,span.fs-tag.fs-error{background:#dc3232}#fs_account .postbox,#fs_account .widefat{max-width:800px}#fs_account h3{font-size:1.3em;padding:12px 15px;margin:0 0 12px 0;line-height:1.4;border-bottom:1px solid #F1F1F1}#fs_account h3 .dashicons{width:26px;height:26px;font-size:1.3em}#fs_account i.dashicons{font-size:1.2em;height:1.2em;width:1.2em}#fs_account .dashicons{vertical-align:middle}#fs_account .fs-header-actions{position:absolute;top:17px;right:15px;font-size:0.9em}#fs_account .fs-header-actions ul{margin:0}#fs_account .fs-header-actions li{float:left}#fs_account .fs-header-actions li form{display:inline-block}#fs_account .fs-header-actions li a{text-decoration:none}#fs_account_details .button-group{float:right}.rtl #fs_account .fs-header-actions{left:15px;right:auto}.fs-key-value-table{width:100%}.fs-key-value-table form{display:inline-block}.fs-key-value-table tr td:first-child{text-align:right}.fs-key-value-table tr td:first-child nobr{font-weight:bold}.fs-key-value-table tr td:first-child form{display:block}.fs-key-value-table tr td.fs-right{text-align:right}.fs-key-value-table tr.fs-odd{background:#ebebeb}.fs-key-value-table td,.fs-key-value-table th{padding:10px}.fs-key-value-table code{line-height:28px}.fs-key-value-table var,.fs-key-value-table code,.fs-key-value-table input[type="text"]{color:#0073AA;font-size:16px;background:none}.fs-key-value-table input[type="text"]{width:100%;font-weight:bold}.fs-field-beta_program label{margin-left:7px}label.fs-tag{background:#ffba00;color:#fff;display:inline-block;border-radius:3px;padding:5px;font-size:11px;line-height:11px;vertical-align:baseline}label.fs-tag.fs-warn{background:#ffba00}label.fs-tag.fs-success{background:#46b450}label.fs-tag.fs-error{background:#dc3232}#fs_sites .fs-scrollable-table .fs-table-body{max-height:200px;overflow:auto;border:1px solid #e5e5e5}#fs_sites .fs-scrollable-table .fs-table-body>table.widefat{border:none !important}#fs_sites .fs-scrollable-table .fs-main-column{width:100%}#fs_sites .fs-scrollable-table .fs-site-details td:first-of-type{text-align:right;color:grey;width:1px}#fs_sites .fs-scrollable-table .fs-site-details td:last-of-type{text-align:right}#fs_sites .fs-scrollable-table .fs-install-details table tr td{width:1px;white-space:nowrap}#fs_sites .fs-scrollable-table .fs-install-details table tr td:last-of-type{width:auto}#fs_addons h3{border:none;margin-bottom:0;padding:4px 5px}#fs_addons td{vertical-align:middle}#fs_addons thead{white-space:nowrap}#fs_addons td:first-child,#fs_addons th:first-child{text-align:left;font-weight:bold}#fs_addons td:last-child,#fs_addons th:last-child{text-align:right}#fs_addons th{font-weight:bold}#fs_billing_address{width:100%}#fs_billing_address tr td{width:50%;padding:5px}#fs_billing_address tr:first-of-type td{padding-top:0}#fs_billing_address span{font-weight:bold}#fs_billing_address input,#fs_billing_address select{display:block;width:100%;margin-top:5px}#fs_billing_address input::-moz-placeholder,#fs_billing_address select::-moz-placeholder{color:transparent;opacity:1}#fs_billing_address input:-ms-input-placeholder,#fs_billing_address select:-ms-input-placeholder{color:transparent}#fs_billing_address input::-webkit-input-placeholder,#fs_billing_address select::-webkit-input-placeholder{color:transparent}#fs_billing_address input.fs-read-mode,#fs_billing_address select.fs-read-mode{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode td span{display:none}#fs_billing_address.fs-read-mode input,#fs_billing_address.fs-read-mode select{border-color:transparent;color:#777;border-bottom:1px dashed #ccc;padding-left:0;background:none}#fs_billing_address.fs-read-mode input::-moz-placeholder,#fs_billing_address.fs-read-mode select::-moz-placeholder{color:#ccc;opacity:1}#fs_billing_address.fs-read-mode input:-ms-input-placeholder,#fs_billing_address.fs-read-mode select:-ms-input-placeholder{color:#ccc}#fs_billing_address.fs-read-mode input::-webkit-input-placeholder,#fs_billing_address.fs-read-mode select::-webkit-input-placeholder{color:#ccc}#fs_billing_address button{display:block;width:100%}
freemius/assets/css/admin/common.css CHANGED
@@ -1,2 +1,2 @@
1
- .fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media (max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}
2
- .fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,0.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,0.3);box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 500px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}.fs-submenu-item.pricing.upgrade-mode{color:greenyellow}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}
1
+ .fs-badge{position:absolute;top:10px;right:0;background:#71ae00;color:white;text-transform:uppercase;padding:5px 10px;-moz-border-radius:3px 0 0 3px;-webkit-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;font-weight:bold;border-right:0;-moz-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);-webkit-box-shadow:0 2px 1px -1px rgba(0,0,0,0.3);box-shadow:0 2px 1px -1px rgba(0,0,0,0.3)}.theme-browser .theme .fs-premium-theme-badge-container{position:absolute;right:0;top:0}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge{position:relative;top:0;margin-top:10px;text-align:center}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-premium-theme-badge{font-size:1.1em}.theme-browser .theme .fs-premium-theme-badge-container .fs-badge.fs-beta-theme-badge{background:#00a0d2}.fs-switch{position:relative;display:inline-block;color:#ccc;text-shadow:0 1px 1px rgba(255,255,255,0.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);background:#ececec;box-shadow:0 0 4px rgba(0,0,0,0.1),inset 0 1px 3px 0 rgba(0,0,0,0.1);cursor:pointer}.fs-switch span{display:inline-block;width:35px;text-transform:uppercase}.fs-switch .fs-toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.3);border-radius:4px;background:#fff;background-color:#fff;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0, #ececec), color-stop(1, #fff));background-image:-webkit-linear-gradient(top, #ececec, #fff);background-image:-moz-linear-gradient(top, #ececec, #fff);background-image:-ms-linear-gradient(top, #ececec, #fff);background-image:-o-linear-gradient(top, #ececec, #fff);background-image:linear-gradient(top, bottom, #ececec, #fff);box-shadow:inset 0 1px 0 0 rgba(255,255,255,0.5);z-index:999;-moz-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-o-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-ms-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);-webkit-transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1);transition:0.4s cubic-bezier(0.54, 1.6, 0.5, 1)}.fs-switch.fs-off .fs-toggle{left:2%}.fs-switch.fs-on .fs-toggle{left:54%}.fs-switch.fs-round{top:8px;padding:4px 25px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round .fs-toggle{top:0;width:24px;height:24px;-moz-border-radius:24px;-webkit-border-radius:24px;border-radius:24px}.fs-switch.fs-round.fs-off .fs-toggle{left:-1px}.fs-switch.fs-round.fs-on{background:#0085ba}.fs-switch.fs-round.fs-on .fs-toggle{left:25px}.fs-switch.fs-small.fs-round{padding:1px 19px}.fs-switch.fs-small.fs-round .fs-toggle{top:0;width:18px;height:18px;-moz-border-radius:18px;-webkit-border-radius:18px;border-radius:18px}.fs-switch.fs-small.fs-round.fs-on .fs-toggle{left:19px}.fs-switch-feedback{margin-left:10px}.fs-switch-feedback.success{color:#71ae00}.rtl .fs-switch-feedback{margin-left:0;margin-right:10px}#fs_frame{line-height:0;font-size:0}.fs-full-size-wrapper{margin:40px 0 -65px -20px}@media (max-width: 600px){.fs-full-size-wrapper{margin:0 0 -65px -10px}}
2
+ .fs-notice{position:relative}.fs-notice.fs-has-title{margin-bottom:30px !important}.fs-notice.success{color:green}.fs-notice.promotion{border-color:#00a0d2 !important;background-color:#f2fcff !important}.fs-notice .fs-notice-body{margin:.5em 0;padding:2px}.fs-notice .fs-close{cursor:pointer;color:#aaa;float:right}.fs-notice .fs-close:hover{color:#666}.fs-notice .fs-close>*{margin-top:7px;display:inline-block}.fs-notice label.fs-plugin-title{background:rgba(0,0,0,0.3);color:#fff;padding:2px 10px;position:absolute;top:100%;bottom:auto;right:auto;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;left:10px;font-size:12px;font-weight:bold;cursor:auto}div.fs-notice.updated,div.fs-notice.success,div.fs-notice.promotion{display:block !important}.rtl .fs-notice .fs-close{float:left}.fs-secure-notice{position:fixed;top:32px;left:160px;right:0;background:#ebfdeb;padding:10px 20px;color:green;z-index:9999;-moz-box-shadow:0 2px 2px rgba(6,113,6,0.3);-webkit-box-shadow:0 2px 2px rgba(6,113,6,0.3);box-shadow:0 2px 2px rgba(6,113,6,0.3);opacity:0.95;filter:alpha(opacity=95)}.fs-secure-notice:hover{opacity:1;filter:alpha(opacity=100)}.fs-secure-notice a.fs-security-proof{color:green;text-decoration:none}@media screen and (max-width: 960px){.fs-secure-notice{left:36px}}@media screen and (max-width: 600px){.fs-secure-notice{display:none}}@media screen and (max-width: 500px){#fs_promo_tab{display:none}}@media screen and (max-width: 782px){.fs-secure-notice{left:0;top:46px;text-align:center}}span.fs-submenu-item.fs-sub:before{content:'\21B3';padding:0 5px}.rtl span.fs-submenu-item.fs-sub:before{content:'\21B2'}.fs-submenu-item.pricing.upgrade-mode{color:greenyellow}.fs-submenu-item.pricing.trial-mode{color:#83e2ff}#adminmenu .update-plugins.fs-trial{background-color:#00b9eb}.fs-ajax-spinner{border:0;width:20px;height:20px;margin-right:5px;vertical-align:sub;display:inline-block;background:url("/wp-admin/images/wpspin_light-2x.gif");background-size:contain;margin-bottom:-2px}.wrap.fs-section h2{text-align:left}.plugins p.fs-upgrade-notice{border:0;background-color:#d54e21;padding:10px;color:#f9f9f9;margin-top:10px}
freemius/assets/css/admin/connect.css CHANGED
@@ -1 +1 @@
1
- #fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.3);box-shadow:0px 1px 2px rgba(0,0,0,0.3);margin:20px 0}@media screen and (max-width: 479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect.require-license-key .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background 0.5s ease;-o-transition:background 0.5s ease;-ms-transition:background 0.5s ease;-webkit-transition:background 0.5s ease;transition:background 0.5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions .fs-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li div{margin-left:55px}#fs_connect .fs-permissions ul li div span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li div p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{height:auto;margin:20px 20px 10px 20px}@media screen and (max-width: 479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-freemium-licensing{padding:8px;background:#777;color:#fff}#fs_connect .fs-freemium-licensing p{text-align:center;display:block;margin:0;padding:0}#fs_connect .fs-freemium-licensing a{color:#C2EEFF;text-decoration:underline}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:0.85em;padding:5px;background:rgba(0,0,0,0.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity 0.3s ease-in-out;-o-transition:opacity 0.3s ease-in-out;-ms-transition:opacity 0.3s ease-in-out;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;position:absolute;background:rgba(0,0,0,0.8);color:#fff;font-family:'arial', serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:0;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);line-height:1.3em;font-weight:bold;text-align:left}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right}.fs-tooltip-trigger .fs-tooltip::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,0.8) transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}#fs_marketing_optin{display:none;margin-top:10px;border:1px solid #ccc;padding:10px;line-height:1.5em}#fs_marketing_optin .fs-message{display:block;margin-bottom:5px;font-size:1.05em;font-weight:600}#fs_marketing_optin.error{border:1px solid #d3135a;background:#fee}#fs_marketing_optin.error .fs-message{color:#d3135a}#fs_marketing_optin .fs-input-container{margin-top:5px}#fs_marketing_optin .fs-input-container label{margin-top:5px;display:block}#fs_marketing_optin .fs-input-container label input{float:left;margin:1px 0 0 0}#fs_marketing_optin .fs-input-container label:first-child{display:block;margin-bottom:2px}#fs_marketing_optin .fs-input-label{display:block;margin-left:20px}#fs_marketing_optin .fs-input-label .underlined{text-decoration:underline}.rtl #fs_marketing_optin .fs-input-container label input{float:right}.rtl #fs_marketing_optin .fs-input-label{margin-left:0;margin-right:20px}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li div{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}#fs_theme_connect_wrapper{position:fixed;top:0;height:100%;width:100%;z-index:99990;background:rgba(0,0,0,0.75);text-align:center;overflow-y:auto}#fs_theme_connect_wrapper:before{content:"";display:inline-block;vertical-align:middle;height:100%}#fs_theme_connect_wrapper>button.close{color:white;cursor:pointer;height:40px;width:40px;position:absolute;right:0;border:0;background-color:transparent;top:32px}#fs_theme_connect_wrapper #fs_connect{top:0;text-align:left;display:inline-block;vertical-align:middle;margin-top:52px;margin-bottom:20px}#fs_theme_connect_wrapper #fs_connect .fs-terms{background:rgba(140,140,140,0.64)}#fs_theme_connect_wrapper #fs_connect .fs-terms,#fs_theme_connect_wrapper #fs_connect .fs-terms a{color:#c5c5c5}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}
1
+ #fs_connect{width:480px;-moz-box-shadow:0px 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.3);box-shadow:0px 1px 2px rgba(0,0,0,0.3);margin:20px 0}@media screen and (max-width: 479px){#fs_connect{-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none;width:auto;margin:0 0 0 -10px}}#fs_connect .fs-content{background:#fff;padding:15px 20px}#fs_connect .fs-content .fs-error{background:snow;color:#d3135a;border:1px solid #d3135a;-moz-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);-webkit-box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 1px 0 rgba(0,0,0,0.1);text-align:center;padding:5px;margin-bottom:10px}#fs_connect .fs-content p{margin:0;padding:0;font-size:1.2em}#fs_connect .fs-license-key-container{position:relative;width:280px;margin:10px auto 0 auto}#fs_connect .fs-license-key-container input{width:100%}#fs_connect .fs-license-key-container .dashicons{position:absolute;top:5px;right:5px}#fs_connect.require-license-key .fs-sites-list-container td{cursor:pointer}#fs_connect #delegate_to_site_admins{margin-right:15px;float:right;height:26px;vertical-align:middle;line-height:37px;font-weight:bold;border-bottom:1px dashed;text-decoration:none}#fs_connect #delegate_to_site_admins.rtl{margin-left:15px;margin-right:0}#fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}#fs_connect .fs-actions .button{padding:0 10px 1px;line-height:35px;height:37px;font-size:16px;margin-bottom:0}#fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}#fs_connect .fs-actions .button.button-primary{padding-right:15px;padding-left:15px}#fs_connect .fs-actions .button.button-primary:after{content:' \279C'}#fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}#fs_connect .fs-actions .button.button-secondary{float:right}#fs_connect.fs-anonymous-disabled .fs-actions .button.button-primary{width:100%}#fs_connect .fs-permissions{padding:10px 20px;background:#FEFEFE;-moz-transition:background 0.5s ease;-o-transition:background 0.5s ease;-ms-transition:background 0.5s ease;-webkit-transition:background 0.5s ease;transition:background 0.5s ease}#fs_connect .fs-permissions .fs-license-sync-disclaimer{text-align:center;margin-top:0}#fs_connect .fs-permissions .fs-trigger{font-size:0.9em;text-decoration:none;text-align:center;display:block}#fs_connect .fs-permissions ul{height:0;overflow:hidden;margin:0}#fs_connect .fs-permissions ul li{margin-bottom:12px}#fs_connect .fs-permissions ul li:last-child{margin-bottom:0}#fs_connect .fs-permissions ul li i.dashicons{float:left;font-size:40px;width:40px;height:40px}#fs_connect .fs-permissions ul li .fs-switch{float:right}#fs_connect .fs-permissions ul li .fs-permission-description{margin-left:55px}#fs_connect .fs-permissions ul li .fs-permission-description span{font-weight:bold;text-transform:uppercase;color:#23282d}#fs_connect .fs-permissions ul li .fs-permission-description p{margin:2px 0 0 0}#fs_connect .fs-permissions.fs-open{background:#fff}#fs_connect .fs-permissions.fs-open ul{height:auto;margin:20px 20px 10px 20px}@media screen and (max-width: 479px){#fs_connect .fs-permissions{background:#fff}#fs_connect .fs-permissions .fs-trigger{display:none}#fs_connect .fs-permissions ul{height:auto;margin:20px}}#fs_connect .fs-freemium-licensing{padding:8px;background:#777;color:#fff}#fs_connect .fs-freemium-licensing p{text-align:center;display:block;margin:0;padding:0}#fs_connect .fs-freemium-licensing a{color:#C2EEFF;text-decoration:underline}#fs_connect .fs-visual{padding:12px;line-height:0;background:#fafafa;height:80px;position:relative}#fs_connect .fs-visual .fs-site-icon{position:absolute;left:20px;top:10px}#fs_connect .fs-visual .fs-connect-logo{position:absolute;right:20px;top:10px}#fs_connect .fs-visual .fs-plugin-icon{position:absolute;top:10px;left:50%;margin-left:-40px}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-site-icon,#fs_connect .fs-visual img,#fs_connect .fs-visual object{width:80px;height:80px}#fs_connect .fs-visual .dashicons-wordpress{font-size:64px;background:#01749a;color:#fff;width:64px;height:64px;padding:8px}#fs_connect .fs-visual .dashicons-plus{position:absolute;top:50%;font-size:30px;margin-top:-10px;color:#bbb}#fs_connect .fs-visual .dashicons-plus.fs-first{left:28%}#fs_connect .fs-visual .dashicons-plus.fs-second{left:65%}#fs_connect .fs-visual .fs-plugin-icon,#fs_connect .fs-visual .fs-connect-logo,#fs_connect .fs-visual .fs-site-icon{border:1px solid #ccc;padding:1px;background:#fff}#fs_connect .fs-terms{text-align:center;font-size:0.85em;padding:5px;background:rgba(0,0,0,0.05)}#fs_connect .fs-terms,#fs_connect .fs-terms a{color:#999}#fs_connect .fs-terms a{text-decoration:none}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-tooltip-trigger{position:relative}.fs-tooltip-trigger:not(a){cursor:help}.fs-tooltip-trigger .fs-tooltip{opacity:0;visibility:hidden;-moz-transition:opacity 0.3s ease-in-out;-o-transition:opacity 0.3s ease-in-out;-ms-transition:opacity 0.3s ease-in-out;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;position:absolute;background:rgba(0,0,0,0.8);color:#fff;font-family:'arial', serif;font-size:12px;padding:10px;z-index:999999;bottom:100%;margin-bottom:5px;left:0;right:0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;-moz-box-shadow:1px 1px 1px rgba(0,0,0,0.2);-webkit-box-shadow:1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px rgba(0,0,0,0.2);line-height:1.3em;font-weight:bold;text-align:left}.rtl .fs-tooltip-trigger .fs-tooltip{text-align:right}.fs-tooltip-trigger .fs-tooltip::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:rgba(0,0,0,0.8) transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl .fs-tooltip-trigger .fs-tooltip::after{right:21px;left:auto}.fs-tooltip-trigger:hover .fs-tooltip{visibility:visible;opacity:1}#fs_marketing_optin{display:none;margin-top:10px;border:1px solid #ccc;padding:10px;line-height:1.5em}#fs_marketing_optin .fs-message{display:block;margin-bottom:5px;font-size:1.05em;font-weight:600}#fs_marketing_optin.error{border:1px solid #d3135a;background:#fee}#fs_marketing_optin.error .fs-message{color:#d3135a}#fs_marketing_optin .fs-input-container{margin-top:5px}#fs_marketing_optin .fs-input-container label{margin-top:5px;display:block}#fs_marketing_optin .fs-input-container label input{float:left;margin:1px 0 0 0}#fs_marketing_optin .fs-input-container label:first-child{display:block;margin-bottom:2px}#fs_marketing_optin .fs-input-label{display:block;margin-left:20px}#fs_marketing_optin .fs-input-label .underlined{text-decoration:underline}.rtl #fs_marketing_optin .fs-input-container label input{float:right}.rtl #fs_marketing_optin .fs-input-label{margin-left:0;margin-right:20px}.rtl #fs_connect .fs-actions{padding:10px 20px;background:#C0C7CA}.rtl #fs_connect .fs-actions .button .dashicons{font-size:37px;margin-left:-8px;margin-right:12px}.rtl #fs_connect .fs-actions .button.button-primary:after{content:' \000bb'}.rtl #fs_connect .fs-actions .button.button-primary.fs-loading:after{content:''}.rtl #fs_connect .fs-actions .button.button-secondary{float:left}.rtl #fs_connect .fs-permissions ul li .fs-permission-description{margin-right:55px;margin-left:0}.rtl #fs_connect .fs-permissions ul li .fs-switch{float:left}.rtl #fs_connect .fs-permissions ul li i.dashicons{float:right}.rtl #fs_connect .fs-visual .fs-site-icon{right:20px;left:auto}.rtl #fs_connect .fs-visual .fs-connect-logo{right:auto;left:20px}#fs_theme_connect_wrapper{position:fixed;top:0;height:100%;width:100%;z-index:99990;background:rgba(0,0,0,0.75);text-align:center;overflow-y:auto}#fs_theme_connect_wrapper:before{content:"";display:inline-block;vertical-align:middle;height:100%}#fs_theme_connect_wrapper>button.close{color:white;cursor:pointer;height:40px;width:40px;position:absolute;right:0;border:0;background-color:transparent;top:32px}#fs_theme_connect_wrapper #fs_connect{top:0;text-align:left;display:inline-block;vertical-align:middle;margin-top:52px;margin-bottom:20px}#fs_theme_connect_wrapper #fs_connect .fs-terms{background:rgba(140,140,140,0.64)}#fs_theme_connect_wrapper #fs_connect .fs-terms,#fs_theme_connect_wrapper #fs_connect .fs-terms a{color:#c5c5c5}.wp-pointer-content #fs_connect{margin:0;-moz-box-shadow:none;-webkit-box-shadow:none;box-shadow:none}.fs-opt-in-pointer .wp-pointer-content{padding:0}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow{border-bottom-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-top .wp-pointer-arrow-inner{border-bottom-color:#fafafa}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow{border-top-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-bottom .wp-pointer-arrow-inner{border-top-color:#fafafa}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow{border-right-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-left .wp-pointer-arrow-inner{border-right-color:#fafafa}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow{border-left-color:#dfdfdf}.fs-opt-in-pointer.wp-pointer-right .wp-pointer-arrow-inner{border-left-color:#fafafa}
freemius/assets/css/admin/debug.css CHANGED
@@ -1 +1 @@
1
- .switch{position:relative;display:inline-block;font-size:1.6em;font-weight:bold;color:#ccc;text-shadow:0px 1px 1px rgba(255,255,255,0.8);height:18px;padding:6px 6px 5px 6px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:4px;background:#ececec;box-shadow:0px 0px 4px rgba(0,0,0,0.1),inset 0px 1px 3px 0px rgba(0,0,0,0.1);cursor:pointer}.switch span{display:inline-block;width:35px;text-transform:uppercase}.switch span.on{color:#6bc406}.switch .toggle{position:absolute;top:1px;width:37px;height:25px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.3);border-radius:4px;background:#fff;background:-moz-linear-gradient(top, #ececec 0%, #fff 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ececec), color-stop(100%, #fff));background:-webkit-linear-gradient(top, #ececec 0%, #fff 100%);background:-o-linear-gradient(top, #ececec 0%, #fff 100%);background:-ms-linear-gradient(top, #ececec 0%, #fff 100%);background:linear-gradient(top, #ececec 0%, #fff 100%);box-shadow:inset 0px 1px 0px 0px rgba(255,255,255,0.5);z-index:999;-moz-transition:all 0.15s ease-in-out;-o-transition:all 0.15s ease-in-out;-ms-transition:all 0.15s ease-in-out;-webkit-transition:all 0.15s ease-in-out;transition:all 0.15s ease-in-out}.switch.on .toggle{left:2%}.switch.off .toggle{left:54%}.switch.round{padding:0px 20px;border-radius:40px}.switch.round .toggle{border-radius:40px;width:14px;height:14px}.switch.round.on .toggle{left:3%;background:#6bc406}.switch.round.off .toggle{left:58%}.switch-label{font-size:20px;line-height:31px;margin:0 5px}#fs_log_book table{font-family:Consolas,Monaco,monospace;font-size:12px}#fs_log_book table th{color:#ccc}#fs_log_book table tr{background:#232525}#fs_log_book table tr.alternate{background:#2b2b2b}#fs_log_book table tr td.fs-col--logger{color:#5a7435}#fs_log_book table tr td.fs-col--type{color:#ffc861}#fs_log_book table tr td.fs-col--function{color:#a7b7b1;font-weight:bold}#fs_log_book table tr td.fs-col--message,#fs_log_book table tr td.fs-col--message a{color:#9a73ac !important}#fs_log_book table tr td.fs-col--file{color:#d07922}#fs_log_book table tr td.fs-col--timestamp{color:#6596be}
1
+ .fs-switch-label{font-size:20px;line-height:31px;margin:0 5px}#fs_log_book table{font-family:Consolas,Monaco,monospace;font-size:12px}#fs_log_book table th{color:#ccc}#fs_log_book table tr{background:#232525}#fs_log_book table tr.alternate{background:#2b2b2b}#fs_log_book table tr td.fs-col--logger{color:#5a7435}#fs_log_book table tr td.fs-col--type{color:#ffc861}#fs_log_book table tr td.fs-col--function{color:#a7b7b1;font-weight:bold}#fs_log_book table tr td.fs-col--message,#fs_log_book table tr td.fs-col--message a{color:#9a73ac !important}#fs_log_book table tr td.fs-col--file{color:#d07922}#fs_log_book table tr td.fs-col--timestamp{color:#6596be}
freemius/assets/css/admin/dialog-boxes.css CHANGED
@@ -1,2 +1,2 @@
1
- .fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eeeeee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:0.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-modal.fs-modal-developer-license-debug-mode .fs-modal-body input.fs-license-or-user-key{width:100%}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media (max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}
2
  .rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:0.3;-o-transform:0.3;-ms-transform:0.3;-webkit-transform:0.3;transform:0.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,0.1) !important}
1
+ .fs-modal{position:fixed;overflow:auto;height:100%;width:100%;top:0;z-index:100000;display:none;background:rgba(0,0,0,0.6)}.fs-modal .dashicons{vertical-align:middle}.fs-modal .fs-modal-dialog{background:transparent;position:absolute;left:50%;margin-left:-298px;padding-bottom:30px;top:-100%;z-index:100001;width:596px}@media (max-width: 650px){.fs-modal .fs-modal-dialog{margin-left:-50%;box-sizing:border-box;padding-left:10px;padding-right:10px;width:100%}.fs-modal .fs-modal-dialog .fs-modal-panel>h3>strong{font-size:1.3em}}.fs-modal.active{display:block}.fs-modal.active:before{display:block}.fs-modal.active .fs-modal-dialog{top:10%}.fs-modal.fs-success .fs-modal-header{border-bottom-color:#46b450}.fs-modal.fs-success .fs-modal-body{background-color:#f7fff7}.fs-modal.fs-warn .fs-modal-header{border-bottom-color:#ffb900}.fs-modal.fs-warn .fs-modal-body{background-color:#fff8e5}.fs-modal.fs-error .fs-modal-header{border-bottom-color:#dc3232}.fs-modal.fs-error .fs-modal-body{background-color:#ffeaea}.fs-modal .fs-modal-body,.fs-modal .fs-modal-footer{border:0;background:#fefefe;padding:20px}.fs-modal .fs-modal-header{border-bottom:#eeeeee solid 1px;background:#fbfbfb;padding:15px 20px;position:relative;margin-bottom:-10px}.fs-modal .fs-modal-header h4{margin:0;padding:0;text-transform:uppercase;font-size:1.2em;font-weight:bold;color:#cacaca;text-shadow:1px 1px 1px #fff;letter-spacing:0.6px;-webkit-font-smoothing:antialiased}.fs-modal .fs-modal-header .fs-close{position:absolute;right:10px;top:12px;cursor:pointer;color:#bbb;-moz-border-radius:20px;-webkit-border-radius:20px;border-radius:20px;padding:3px;-moz-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;-ms-transition:all 0.2s ease-in-out;-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.fs-modal .fs-modal-header .fs-close:hover{color:#fff;background:#aaa}.fs-modal .fs-modal-header .fs-close .dashicons,.fs-modal .fs-modal-header .fs-close:hover .dashicons{text-decoration:none}.fs-modal .fs-modal-body{border-bottom:0}.fs-modal .fs-modal-body p{font-size:14px}.fs-modal .fs-modal-body h2{font-size:20px;line-height:1.5em}.fs-modal .fs-modal-body>div{margin-top:10px}.fs-modal .fs-modal-body>div h2{font-weight:bold;font-size:20px;margin-top:0}.fs-modal .fs-modal-footer{border-top:#eeeeee solid 1px;text-align:right}.fs-modal .fs-modal-footer>.button{margin:0 7px}.fs-modal .fs-modal-footer>.button:first-child{margin:0}.fs-modal .fs-modal-panel>.notice.inline{margin:0;display:none}.fs-modal .fs-modal-panel:not(.active){display:none}.rtl .fs-modal .fs-modal-header .fs-close{right:auto;left:20px}body.has-fs-modal{overflow:hidden}.fs-modal.fs-modal-deactivation-feedback .reason-input,.fs-modal.fs-modal-deactivation-feedback .internal-message{margin:3px 0 3px 22px}.fs-modal.fs-modal-deactivation-feedback .reason-input input,.fs-modal.fs-modal-deactivation-feedback .reason-input textarea,.fs-modal.fs-modal-deactivation-feedback .internal-message input,.fs-modal.fs-modal-deactivation-feedback .internal-message textarea{width:100%}.fs-modal.fs-modal-deactivation-feedback li.reason.has-internal-message .internal-message{border:1px solid #ccc;padding:7px;display:none}@media (max-width: 650px){.fs-modal.fs-modal-deactivation-feedback li.reason li.reason{margin-bottom:10px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .reason-input,.fs-modal.fs-modal-deactivation-feedback li.reason li.reason .internal-message{margin-left:29px}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label{display:table}.fs-modal.fs-modal-deactivation-feedback li.reason li.reason label>span{display:table-cell;font-size:1.3em}}.fs-modal.fs-modal-deactivation-feedback .anonymous-feedback-label{float:left}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel{margin-top:0 !important}.fs-modal.fs-modal-deactivation-feedback .fs-modal-panel h3{margin-top:0;line-height:1.5em}#the-list .deactivate>.fs-slug{display:none}.fs-modal.fs-modal-subscription-cancellation .fs-price-increase-warning{color:red;font-weight:bold;padding:0 25px;margin-bottom:0}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:left;top:5px;position:relative}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label input{float:right}.fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{display:block;margin-left:24px}.rtl .fs-modal.fs-modal-subscription-cancellation ul.subscription-actions label span{margin-left:0;margin-right:24px}.fs-modal.fs-modal-license-activation .fs-modal-body input.fs-license-key{width:100%}.fs-license-options-container table,.fs-license-options-container table select,.fs-license-options-container table .fs-available-license-key{width:100%}.fs-license-options-container table td:first-child{width:1%}.fs-license-options-container table .fs-other-license-key-container label{position:relative;top:6px;float:left;margin-right:5px}.fs-license-options-container table .fs-other-license-key-container div{overflow:hidden;width:auto;height:30px;display:block;top:2px;position:relative}.fs-license-options-container table .fs-other-license-key-container div input{margin:0}.fs-sites-list-container td{cursor:pointer}.fs-modal.fs-modal-user-change .fs-modal-body input#fs_other_email_address{width:100%}.fs-user-change-options-container table{width:100%;border-collapse:collapse}.fs-user-change-options-container table tr{display:block;margin-bottom:2px}.fs-user-change-options-container table .fs-email-address-container td{display:inline-block}.fs-user-change-options-container table .fs-email-address-container input[type="radio"]{margin-bottom:0;margin-top:0}.fs-user-change-options-container table .fs-other-email-address-container{width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div{display:table;width:100%}.fs-user-change-options-container table .fs-other-email-address-container>div label,.fs-user-change-options-container table .fs-other-email-address-container>div>div{display:table-cell}.fs-user-change-options-container table .fs-other-email-address-container>div label{width:1%;padding-left:3px;padding-right:3px}.fs-user-change-options-container table .fs-other-email-address-container>div>div{width:auto}.fs-user-change-options-container table .fs-other-email-address-container>div>div input{width:100%}.fs-modal.fs-modal-developer-license-debug-mode .fs-modal-body input.fs-license-or-user-key{width:100%}.fs-multisite-options-container{margin-top:10px;border:1px solid #ccc;padding:5px}.fs-multisite-options-container a{text-decoration:none}.fs-multisite-options-container a:focus{box-shadow:none}.fs-multisite-options-container a.selected{font-weight:bold}.fs-multisite-options-container.fs-apply-on-all-sites{border:0 none;padding:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options{border-spacing:0}.fs-multisite-options-container.fs-apply-on-all-sites .fs-all-sites-options td:not(:first-child){display:none}.fs-multisite-options-container .fs-sites-list-container{display:none;overflow:auto}.fs-multisite-options-container .fs-sites-list-container table td{border-top:1px solid #ccc;padding:4px 2px}.fs-modal.fs-modal-license-key-resend .email-address-container{overflow:hidden;padding-right:2px}.fs-modal.fs-modal-license-key-resend.fs-freemium input.email-address{width:300px}.fs-modal.fs-modal-license-key-resend.fs-freemium label{display:block;margin-bottom:10px}.fs-modal.fs-modal-license-key-resend.fs-premium input.email-address{width:100%}.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{float:right;margin-left:7px}@media (max-width: 650px){.fs-modal.fs-modal-license-key-resend.fs-premium .button-container{margin-top:2px}}
2
  .rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .input-container>.email-address-container{padding-left:2px;padding-right:0}.rtl .fs-modal.fs-modal-license-key-resend .fs-modal-body .button-container{float:left;margin-right:7px;margin-left:0}a.show-license-resend-modal{margin-top:4px;display:inline-block}.fs-ajax-loader{position:relative;width:170px;height:20px;margin:auto}.fs-ajax-loader .fs-ajax-loader-bar{position:absolute;top:0;background-color:#0074a3;width:20px;height:20px;-webkit-animation-name:bounce_ajaxLoader;-moz-animation-name:bounce_ajaxLoader;-ms-animation-name:bounce_ajaxLoader;-o-animation-name:bounce_ajaxLoader;animation-name:bounce_ajaxLoader;-webkit-animation-duration:1.5s;-moz-animation-duration:1.5s;-ms-animation-duration:1.5s;-o-animation-duration:1.5s;animation-duration:1.5s;animation-iteration-count:infinite;-o-animation-iteration-count:infinite;-ms-animation-iteration-count:infinite;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;-webkit-animation-direction:normal;-moz-animation-direction:normal;-ms-animation-direction:normal;-o-animation-direction:normal;animation-direction:normal;-moz-transform:0.3;-o-transform:0.3;-ms-transform:0.3;-webkit-transform:0.3;transform:0.3}.fs-ajax-loader .fs-ajax-loader-bar-1{left:0px;animation-delay:0.6s;-o-animation-delay:0.6s;-ms-animation-delay:0.6s;-webkit-animation-delay:0.6s;-moz-animation-delay:0.6s}.fs-ajax-loader .fs-ajax-loader-bar-2{left:19px;animation-delay:0.75s;-o-animation-delay:0.75s;-ms-animation-delay:0.75s;-webkit-animation-delay:0.75s;-moz-animation-delay:0.75s}.fs-ajax-loader .fs-ajax-loader-bar-3{left:38px;animation-delay:0.9s;-o-animation-delay:0.9s;-ms-animation-delay:0.9s;-webkit-animation-delay:0.9s;-moz-animation-delay:0.9s}.fs-ajax-loader .fs-ajax-loader-bar-4{left:57px;animation-delay:1.05s;-o-animation-delay:1.05s;-ms-animation-delay:1.05s;-webkit-animation-delay:1.05s;-moz-animation-delay:1.05s}.fs-ajax-loader .fs-ajax-loader-bar-5{left:76px;animation-delay:1.2s;-o-animation-delay:1.2s;-ms-animation-delay:1.2s;-webkit-animation-delay:1.2s;-moz-animation-delay:1.2s}.fs-ajax-loader .fs-ajax-loader-bar-6{left:95px;animation-delay:1.35s;-o-animation-delay:1.35s;-ms-animation-delay:1.35s;-webkit-animation-delay:1.35s;-moz-animation-delay:1.35s}.fs-ajax-loader .fs-ajax-loader-bar-7{left:114px;animation-delay:1.5s;-o-animation-delay:1.5s;-ms-animation-delay:1.5s;-webkit-animation-delay:1.5s;-moz-animation-delay:1.5s}.fs-ajax-loader .fs-ajax-loader-bar-8{left:133px;animation-delay:1.65s;-o-animation-delay:1.65s;-ms-animation-delay:1.65s;-webkit-animation-delay:1.65s;-moz-animation-delay:1.65s}@-moz-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-ms-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-o-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@-webkit-keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}@keyframes bounce_ajaxLoader{0%{-moz-transform:scale(1);-o-transform:scale(1);-ms-transform:scale(1);-webkit-transform:scale(1);transform:scale(1);background-color:#0074a3}100%{-moz-transform:scale(0.3);-o-transform:scale(0.3);-ms-transform:scale(0.3);-webkit-transform:scale(0.3);transform:scale(0.3);background-color:#fff}}.fs-modal-auto-install #request-filesystem-credentials-form h2,.fs-modal-auto-install #request-filesystem-credentials-form .request-filesystem-credentials-action-buttons{display:none}.fs-modal-auto-install #request-filesystem-credentials-form input[type=password],.fs-modal-auto-install #request-filesystem-credentials-form input[type=email],.fs-modal-auto-install #request-filesystem-credentials-form input[type=text]{-webkit-appearance:none;padding:10px 10px 5px 10px;width:300px;max-width:100%}.fs-modal-auto-install #request-filesystem-credentials-form>div,.fs-modal-auto-install #request-filesystem-credentials-form label,.fs-modal-auto-install #request-filesystem-credentials-form fieldset{width:300px;max-width:100%;margin:0 auto;display:block}.button-primary.warn{box-shadow:0 1px 0 #d2593c;text-shadow:0 -1px 1px #d2593c,1px 0 1px #d2593c,0 1px 1px #d2593c,-1px 0 1px #d2593c;background:#f56a48;border-color:#ec6544 #d2593c #d2593c}.button-primary.warn:hover{background:#fd6d4a;border-color:#d2593c}.button-primary.warn:focus{box-shadow:0 1px 0 #dd6041,0 0 2px 1px #e4a796}.button-primary.warn:active{background:#dd6041;border-color:#d2593c;box-shadow:inset 0 2px 0 #d2593c}.button-primary.warn.disabled{color:#f5b3a1 !important;background:#e76444 !important;border-color:#d85e40 !important;text-shadow:0 -1px 0 rgba(0,0,0,0.1) !important}
freemius/assets/img/all-in-one-video-gallery.png DELETED
Binary file
freemius/includes/class-freemius.php CHANGED
@@ -1639,6 +1639,7 @@
1639
  add_action( 'admin_init', array( &$this, '_add_license_activation' ) );
1640
  add_action( 'admin_init', array( &$this, '_add_premium_version_upgrade_selection' ) );
1641
  add_action( 'admin_init', array( &$this, '_add_beta_mode_update_handler' ) );
 
1642
 
1643
  $this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
1644
  $this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
@@ -5407,6 +5408,62 @@
5407
  }
5408
  }
5409
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5410
  /**
5411
  * Parse plugin's settings (as defined by the plugin dev).
5412
  *
@@ -5915,12 +5972,16 @@
5915
  * @return Freemius[]
5916
  */
5917
  function get_installed_addons() {
 
 
 
 
 
5918
  $installed_addons = array();
 
5919
  foreach ( self::$_instances as $instance ) {
5920
- if ( $instance->is_addon() && is_object( $instance->_parent_plugin ) ) {
5921
- if ( $this->_plugin->id == $instance->_parent_plugin->id ) {
5922
- $installed_addons[] = $instance;
5923
- }
5924
  }
5925
  }
5926
 
@@ -5970,7 +6031,25 @@
5970
  * @return bool
5971
  */
5972
  function is_addon() {
5973
- return isset( $this->_plugin->parent_plugin_id ) && is_numeric( $this->_plugin->parent_plugin_id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5974
  }
5975
 
5976
  /**
@@ -6727,6 +6806,8 @@
6727
  } else {
6728
  $this->sync_install();
6729
  }
 
 
6730
  }
6731
  }
6732
  }
@@ -6939,6 +7020,8 @@
6939
  } else {
6940
  $this->sync_install( array(), true );
6941
  }
 
 
6942
  }
6943
  }
6944
 
@@ -8006,6 +8089,10 @@
8006
  foreach ( $sites as $site ) {
8007
  $blog_id = self::get_site_blog_id( $site );
8008
 
 
 
 
 
8009
  $install_id = $this->_delete_site( true, $blog_id );
8010
 
8011
  // Clear all storage data.
@@ -8783,26 +8870,28 @@
8783
  $include_themes = true,
8784
  $include_blog_data = true
8785
  ) {
8786
- if ( ! defined( 'WP_FS__TRACK_PLUGINS' ) || false !== WP_FS__TRACK_PLUGINS ) {
8787
- /**
8788
- * @since 1.1.8 Also send plugin updates.
8789
- */
8790
- if ( $include_plugins && ! isset( $override['plugins'] ) ) {
8791
- $plugins = $this->get_plugins_data_for_api();
8792
- if ( ! empty( $plugins ) ) {
8793
- $override['plugins'] = $plugins;
 
 
8794
  }
8795
  }
8796
- }
8797
 
8798
- if ( ! defined( 'WP_FS__TRACK_THEMES' ) || false !== WP_FS__TRACK_THEMES ) {
8799
- /**
8800
- * @since 1.1.8 Also send themes updates.
8801
- */
8802
- if ( $include_themes && ! isset( $override['themes'] ) ) {
8803
- $themes = $this->get_themes_data_for_api();
8804
- if ( ! empty( $themes ) ) {
8805
- $override['themes'] = $themes;
 
8806
  }
8807
  }
8808
  }
@@ -9158,6 +9247,21 @@
9158
  }
9159
  }
9160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9161
  /**
9162
  * Update install only if changed.
9163
  *
@@ -9441,6 +9545,8 @@
9441
  $fs = self::get_instance_by_file( $plugin_file );
9442
 
9443
  if ( is_object( $fs ) ) {
 
 
9444
  self::require_plugin_essentials();
9445
 
9446
  if ( is_plugin_active( $fs->_free_plugin_basename ) ||
@@ -11322,7 +11428,22 @@
11322
 
11323
  // Update current license.
11324
  if ( is_object( $this->_license ) ) {
11325
- $this->set_license( $this->_get_license_by_id( $this->_license->id ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11326
  }
11327
 
11328
  return $this->_licenses;
@@ -11771,6 +11892,14 @@
11771
  function _update_site_license( $new_license ) {
11772
  $this->_logger->entrance();
11773
 
 
 
 
 
 
 
 
 
11774
  $this->set_license( $new_license );
11775
 
11776
  if ( ! is_object( $new_license ) ) {
@@ -12219,7 +12348,7 @@
12219
  }
12220
 
12221
  $current_plan_order = - 1;
12222
- $required_plan_order = - 1;
12223
  for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
12224
  if ( $plan === $this->_plans[ $i ]->name ) {
12225
  $required_plan_order = $i;
@@ -12376,6 +12505,65 @@
12376
  fs_require_template( 'forms/resend-key.php', $vars );
12377
  }
12378
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12379
  /**
12380
  * @author Leo Fajardo (@leorw)
12381
  * @since 2.3.1
@@ -12497,7 +12685,17 @@
12497
  return;
12498
  }
12499
 
12500
- if ( $this->has_premium_version() && ! $this->is_premium() ) {
 
 
 
 
 
 
 
 
 
 
12501
  // Only add license activation logic to the premium version, or in case of a serviceware plugin, also in the free version.
12502
  return;
12503
  }
@@ -12524,6 +12722,55 @@
12524
  $this->add_ajax_action( 'resend_license_key', array( &$this, '_resend_license_key_ajax_action' ) );
12525
  }
12526
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12527
  /**
12528
  * @author Leo Fajardo (@leorw)
12529
  * @since 2.0.2
@@ -12629,7 +12876,9 @@
12629
  array(),
12630
  fs_request_get_bool( 'is_marketing_allowed', null ),
12631
  fs_request_get( 'blog_id', null ),
12632
- fs_request_get( 'module_id', null, 'post' )
 
 
12633
  );
12634
 
12635
  echo json_encode( $result );
@@ -12637,6 +12886,86 @@
12637
  exit;
12638
  }
12639
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12640
  /**
12641
  * A helper method to activate migrated licenses. If the product is network activated and integrated, the method will network activate the license.
12642
  *
@@ -12689,6 +13018,7 @@
12689
  * @param null|bool $is_marketing_allowed
12690
  * @param null|int $blog_id
12691
  * @param null|number $plugin_id
 
12692
  *
12693
  * @return array {
12694
  * @var bool $success
@@ -12701,7 +13031,9 @@
12701
  $sites = array(),
12702
  $is_marketing_allowed = null,
12703
  $blog_id = null,
12704
- $plugin_id = null
 
 
12705
  ) {
12706
  $this->_logger->entrance();
12707
 
@@ -12716,6 +13048,8 @@
12716
  $this :
12717
  $this->get_addon_instance( $plugin_id );
12718
 
 
 
12719
  $error = false;
12720
  $next_page = false;
12721
 
@@ -12789,6 +13123,22 @@
12789
  'license_key' => $fs->apply_filters( 'license_key', $license_key )
12790
  );
12791
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12792
  $api = $fs->get_api_site_scope();
12793
 
12794
  $install = $api->call( $fs->add_show_pending( '/' ), 'put', $params );
@@ -12799,6 +13149,14 @@
12799
  var_export( $install->error, true );
12800
  } else {
12801
  $fs->reconnect_locally( $has_valid_blog_id );
 
 
 
 
 
 
 
 
12802
  }
12803
  } else /* ( $fs->is_addon() && $fs->get_parent_instance()->is_registered() ) */ {
12804
  $result = $fs->activate_license_on_site( $user, $license_key );
@@ -12816,6 +13174,8 @@
12816
 
12817
  $fs->_sync_license( true, $has_valid_blog_id );
12818
 
 
 
12819
  $next_page = $fs->is_addon() ?
12820
  $fs->get_parent_instance()->get_account_url() :
12821
  $fs->get_account_url();
@@ -12922,6 +13282,64 @@
12922
  return $result;
12923
  }
12924
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12925
  /**
12926
  * @author Leo Fajardo (@leorw)
12927
  * @since 1.2.3.1
@@ -15360,7 +15778,7 @@
15360
  /**
15361
  * This is a special fault tolerance mechanism to handle a scenario that the user data is missing.
15362
  */
15363
- $user = $this->fetch_user_by_install();
15364
  }
15365
 
15366
  $this->_user = ( $user instanceof FS_User ) ?
@@ -15400,13 +15818,19 @@
15400
  * @author Vova Feldman (@svovaf)
15401
  * @since 2.0.0
15402
  *
 
 
15403
  * @return \FS_User|mixed
15404
  */
15405
- private function fetch_user_by_install() {
 
 
 
 
15406
  $api = $this->get_api_site_scope();
15407
 
15408
  $uid = $this->get_anonymous_id();
15409
- $request_path = "/users/{$this->_site->user_id}.json?uid={$uid}";
15410
 
15411
  $result = $api->get( $request_path, false, WP_FS__TIME_10_MIN_IN_SEC );
15412
 
@@ -15836,6 +16260,9 @@
15836
  ( isset( $decoded->is_marketing_allowed ) && ! is_null( $decoded->is_marketing_allowed ) ?
15837
  $decoded->is_marketing_allowed :
15838
  null ),
 
 
 
15839
  $decoded->install_id,
15840
  $decoded->install_public_key,
15841
  $decoded->install_secret_key,
@@ -15849,6 +16276,9 @@
15849
  ( isset( $decoded->is_marketing_allowed ) && ! is_null( $decoded->is_marketing_allowed ) ?
15850
  $decoded->is_marketing_allowed :
15851
  null ),
 
 
 
15852
  $decoded->installs,
15853
  false
15854
  );
@@ -16075,6 +16505,7 @@
16075
  fs_request_get( 'user_public_key' ),
16076
  fs_request_get( 'user_secret_key' ),
16077
  fs_request_get_bool( 'is_marketing_allowed', null ),
 
16078
  $pending_sites_info['blog_ids'],
16079
  $pending_sites_info['license_key'],
16080
  $pending_sites_info['trial_plan_id']
@@ -16085,6 +16516,7 @@
16085
  fs_request_get( 'user_public_key' ),
16086
  fs_request_get( 'user_secret_key' ),
16087
  fs_request_get_bool( 'is_marketing_allowed', null ),
 
16088
  fs_request_get( 'install_id' ),
16089
  fs_request_get( 'install_public_key' ),
16090
  fs_request_get( 'install_secret_key' ),
@@ -16140,13 +16572,12 @@
16140
  * @param string $user_public_key
16141
  * @param string $user_secret_key
16142
  * @param bool|null $is_marketing_allowed
 
16143
  * @param number $install_id
16144
  * @param string $install_public_key
16145
  * @param string $install_secret_key
16146
  * @param bool $redirect
16147
- * @param bool $auto_install Since 1.2.1.7 If `true` and setting up an account with a valid license, will
16148
- * redirect (or return a URL) to the account page with a special parameter to
16149
- * trigger the auto installation processes.
16150
  *
16151
  * @return string If redirect is `false`, returns the next page the user should be redirected to.
16152
  */
@@ -16155,6 +16586,7 @@
16155
  $user_public_key,
16156
  $user_secret_key,
16157
  $is_marketing_allowed,
 
16158
  $install_id,
16159
  $install_public_key,
16160
  $install_secret_key,
@@ -16196,6 +16628,10 @@
16196
  $this->disable_opt_in_notice_and_lock_user();
16197
  }
16198
 
 
 
 
 
16199
  return $this->setup_account(
16200
  $this->_user,
16201
  $this->_site,
@@ -16214,6 +16650,7 @@
16214
  * @param string $user_public_key
16215
  * @param string $user_secret_key
16216
  * @param bool|null $is_marketing_allowed
 
16217
  * @param array $site_ids
16218
  * @param bool $license_key
16219
  * @param bool $trial_plan_id
@@ -16226,6 +16663,7 @@
16226
  $user_public_key,
16227
  $user_secret_key,
16228
  $is_marketing_allowed,
 
16229
  $site_ids,
16230
  $license_key = false,
16231
  $trial_plan_id = false,
@@ -16237,6 +16675,10 @@
16237
  $this->disable_opt_in_notice_and_lock_user();
16238
  }
16239
 
 
 
 
 
16240
  $sites = array();
16241
  foreach ( $site_ids as $site_id ) {
16242
  $sites[] = $this->get_site_info( array( 'blog_id' => $site_id ) );
@@ -16255,11 +16697,10 @@
16255
  * @param string $user_public_key
16256
  * @param string $user_secret_key
16257
  * @param bool|null $is_marketing_allowed
 
16258
  * @param object[] $installs
16259
  * @param bool $redirect
16260
- * @param bool $auto_install Since 1.2.1.7 If `true` and setting up an account with a valid license, will
16261
- * redirect (or return a URL) to the account page with a special parameter to
16262
- * trigger the auto installation processes.
16263
  *
16264
  * @return string If redirect is `false`, returns the next page the user should be redirected to.
16265
  */
@@ -16268,6 +16709,7 @@
16268
  $user_public_key,
16269
  $user_secret_key,
16270
  $is_marketing_allowed,
 
16271
  array $installs,
16272
  $redirect = true,
16273
  $auto_install = false
@@ -16278,6 +16720,10 @@
16278
  $this->disable_opt_in_notice_and_lock_user();
16279
  }
16280
 
 
 
 
 
16281
  $install_ids = array();
16282
 
16283
  foreach ( $installs as $install ) {
@@ -16387,6 +16833,8 @@
16387
  */
16388
  $license_key = fs_request_get( 'license_secret_key' );
16389
 
 
 
16390
  $this->install_with_current_user( $license_key );
16391
  }
16392
  }
@@ -18100,23 +18548,27 @@
18100
 
18101
  $sites = self::get_all_sites( $this->_module_type, $network_level_or_blog_id );
18102
 
18103
- $prev_stored_user_id = $this->_storage->get( 'prev_user_id', false, $network_level_or_blog_id );
 
18104
 
18105
- if ( empty( $prev_stored_user_id ) &&
18106
- is_object($this->_user) && $this->_user->id != $site->user_id
18107
- ) {
18108
- /**
18109
- * Store the current user ID as the previous user ID so that the previous user can be used
18110
- * as the install's owner while the new owner's details are not yet available.
18111
- *
18112
- * This will be executed only in the `replica` site. For example, there are 2 sites, namely `original`
18113
- * and `replica`, then an ownership change was initiated and completed in the `original`, the `replica`
18114
- * will be using the previous user until it is updated again (e.g.: until the next clone of `original`
18115
- * into `replica`.
18116
- *
18117
- * @author Leo Fajardo (@leorw)
18118
- */
18119
- $this->_storage->store( 'prev_user_id', $sites[ $this->_slug ]->user_id, $network_level_or_blog_id );
 
 
 
18120
  }
18121
 
18122
  $sites[ $this->_slug ] = $site_clone;
@@ -19948,7 +20400,11 @@
19948
 
19949
  if ( $show_notice ) {
19950
  $this->_admin_notices->add(
19951
- sprintf( $this->get_text_inline( 'Your license was successfully deactivated, you are back to the %s plan.', 'license-deactivation-message' ), $this->get_plan_title() ),
 
 
 
 
19952
  $this->get_text_inline( 'O.K', 'ok' )
19953
  );
19954
  }
@@ -20755,6 +21211,39 @@
20755
  return true;
20756
  }
20757
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20758
  /**
20759
  * Handle user name update.
20760
  *
@@ -20923,8 +21412,9 @@
20923
  // Alias.
20924
  $oops_text = $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...';
20925
 
20926
- $is_network_action = $this->is_network_level_action();
20927
- $blog_id = $this->is_network_level_site_specific_action();
 
20928
 
20929
  if ( is_numeric( $blog_id ) ) {
20930
  $this->switch_to_blog( $blog_id );
@@ -20936,7 +21426,7 @@
20936
  case 'opt_in':
20937
  check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
20938
 
20939
- if ( $plugin_id == $this->get_id() ) {
20940
  if ( $is_network_action && ! empty( $blog_id ) ) {
20941
  if ( ! $this->is_registered() ) {
20942
  $this->install_with_user(
@@ -20959,7 +21449,7 @@
20959
  case 'toggle_tracking':
20960
  check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
20961
 
20962
- if ( $plugin_id == $this->get_id() ) {
20963
  if ( $is_network_action && ! empty( $blog_id ) ) {
20964
  if ( $this->is_registered() ) {
20965
  if ( $this->is_tracking_prohibited() ) {
@@ -20994,8 +21484,20 @@
20994
  case 'delete_account':
20995
  check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
20996
 
20997
- if ( $plugin_id == $this->get_id() ) {
20998
- if ( $is_network_action && empty( $blog_id ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
20999
  $this->delete_network_account_event();
21000
  } else {
21001
  $this->delete_account_event();
@@ -21011,7 +21513,12 @@
21011
  } else {
21012
  if ( $this->is_addon_activated( $plugin_id ) ) {
21013
  $fs_addon = self::get_instance_by_id( $plugin_id );
21014
- $fs_addon->delete_account_event();
 
 
 
 
 
21015
 
21016
  fs_redirect( $this->_get_admin_page_url( 'account' ) );
21017
  }
@@ -22154,9 +22661,18 @@
22154
 
22155
  $this->_logger->entrance();
22156
 
22157
- if ( $this->is_premium() ) {
 
 
 
 
22158
  // Don't add opt-in/out for premium code base.
22159
  return;
 
 
 
 
 
22160
  }
22161
 
22162
  if ( fs_is_network_admin() ) {
@@ -22209,6 +22725,10 @@
22209
  return;
22210
  }
22211
 
 
 
 
 
22212
  $link_text_id = '';
22213
  $url = '#';
22214
 
@@ -23863,10 +24383,45 @@
23863
  *
23864
  * @author Vova Feldman (@svovaf)
23865
  */
23866
- self::shoot_ajax_success( array( 'is_marketing_allowed' => null ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23867
  }
23868
 
23869
- self::shoot_ajax_success( array( 'is_marketing_allowed' => $user_plugins[0]->is_marketing_allowed ) );
23870
  }
23871
 
23872
  /**
1639
  add_action( 'admin_init', array( &$this, '_add_license_activation' ) );
1640
  add_action( 'admin_init', array( &$this, '_add_premium_version_upgrade_selection' ) );
1641
  add_action( 'admin_init', array( &$this, '_add_beta_mode_update_handler' ) );
1642
+ add_action( 'admin_init', array( &$this, '_add_user_change_option' ) );
1643
 
1644
  $this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
1645
  $this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
5408
  }
5409
  }
5410
 
5411
+ /**
5412
+ * @author Vova Feldman (@svovaf)
5413
+ * @since 2.3.2
5414
+ *
5415
+ * @return bool
5416
+ */
5417
+ function is_extensions_tracking_allowed() {
5418
+ return (true === $this->_storage->get( 'is_extensions_tracking_allowed', true ) );
5419
+ }
5420
+
5421
+ /**
5422
+ * @author Vova Feldman (@svovaf)
5423
+ * @since 2.3.2
5424
+ */
5425
+ function _update_tracking_permission_callback() {
5426
+ $this->_logger->entrance();
5427
+
5428
+ $this->check_ajax_referer( 'update_tracking_permission' );
5429
+
5430
+ $is_enabled = fs_request_get_bool( 'is_enabled', null );
5431
+
5432
+ if ( ! is_bool( $is_enabled ) ) {
5433
+ self::shoot_ajax_failure();
5434
+ }
5435
+
5436
+ $permission = fs_request_get( 'permission' );
5437
+
5438
+ switch ( $permission ) {
5439
+ case 'extensions':
5440
+ $this->update_extensions_tracking_flag( $is_enabled );
5441
+ break;
5442
+ default:
5443
+ $permission = 'no_match';
5444
+ }
5445
+
5446
+ if ( 'no_match' === $permission ) {
5447
+ self::shoot_ajax_failure();
5448
+ }
5449
+
5450
+ self::shoot_ajax_success( array(
5451
+ 'permissions' => array(
5452
+ $permission => $is_enabled,
5453
+ )
5454
+ ) );
5455
+ }
5456
+
5457
+ /**
5458
+ * @author Leo Fajardo (@leorw)
5459
+ * @since 2.3.2
5460
+ *
5461
+ * @param bool $is_enabled
5462
+ */
5463
+ private function update_extensions_tracking_flag( $is_enabled ) {
5464
+ $this->_storage->store( 'is_extensions_tracking_allowed', $is_enabled );
5465
+ }
5466
+
5467
  /**
5468
  * Parse plugin's settings (as defined by the plugin dev).
5469
  *
5972
  * @return Freemius[]
5973
  */
5974
  function get_installed_addons() {
5975
+ if ( $this->is_addon() ) {
5976
+ // Add-on cannot have add-ons.
5977
+ return array();
5978
+ }
5979
+
5980
  $installed_addons = array();
5981
+
5982
  foreach ( self::$_instances as $instance ) {
5983
+ if ( $instance->is_addon_of( $this->_plugin->id ) ) {
5984
+ $installed_addons[] = $instance;
 
 
5985
  }
5986
  }
5987
 
6031
  * @return bool
6032
  */
6033
  function is_addon() {
6034
+ return (
6035
+ isset( $this->_plugin->parent_plugin_id ) &&
6036
+ is_numeric( $this->_plugin->parent_plugin_id )
6037
+ );
6038
+ }
6039
+
6040
+ /**
6041
+ * @author Vova Feldman (@svovaf)
6042
+ * @since 2.3.2
6043
+ *
6044
+ * @param number $parent_product_id
6045
+ *
6046
+ * @return bool
6047
+ */
6048
+ function is_addon_of( $parent_product_id ) {
6049
+ return (
6050
+ $this->is_addon() &&
6051
+ $parent_product_id == $this->_plugin->parent_plugin_id
6052
+ );
6053
  }
6054
 
6055
  /**
6806
  } else {
6807
  $this->sync_install();
6808
  }
6809
+
6810
+ $this->maybe_sync_install_user();
6811
  }
6812
  }
6813
  }
7020
  } else {
7021
  $this->sync_install( array(), true );
7022
  }
7023
+
7024
+ $this->maybe_sync_install_user();
7025
  }
7026
  }
7027
 
8089
  foreach ( $sites as $site ) {
8090
  $blog_id = self::get_site_blog_id( $site );
8091
 
8092
+ if ( $this->is_site_delegated_connection( $blog_id ) ) {
8093
+ continue;
8094
+ }
8095
+
8096
  $install_id = $this->_delete_site( true, $blog_id );
8097
 
8098
  // Clear all storage data.
8870
  $include_themes = true,
8871
  $include_blog_data = true
8872
  ) {
8873
+ if ( $this->is_extensions_tracking_allowed() ) {
8874
+ if ( ! defined( 'WP_FS__TRACK_PLUGINS' ) || false !== WP_FS__TRACK_PLUGINS ) {
8875
+ /**
8876
+ * @since 1.1.8 Also send plugin updates.
8877
+ */
8878
+ if ( $include_plugins && ! isset( $override['plugins'] ) ) {
8879
+ $plugins = $this->get_plugins_data_for_api();
8880
+ if ( ! empty( $plugins ) ) {
8881
+ $override['plugins'] = $plugins;
8882
+ }
8883
  }
8884
  }
 
8885
 
8886
+ if ( ! defined( 'WP_FS__TRACK_THEMES' ) || false !== WP_FS__TRACK_THEMES ) {
8887
+ /**
8888
+ * @since 1.1.8 Also send themes updates.
8889
+ */
8890
+ if ( $include_themes && ! isset( $override['themes'] ) ) {
8891
+ $themes = $this->get_themes_data_for_api();
8892
+ if ( ! empty( $themes ) ) {
8893
+ $override['themes'] = $themes;
8894
+ }
8895
  }
8896
  }
8897
  }
9247
  }
9248
  }
9249
 
9250
+ /**
9251
+ * Syncs the install owner's data if needed (i.e., if the install owner is different from the loaded user).
9252
+ *
9253
+ * @author Leo Fajardo (@leorw)
9254
+ * @since 2.3.2
9255
+ */
9256
+ private function maybe_sync_install_user() {
9257
+ if ( $this->_user->id == $this->_site->user_id ) {
9258
+ return;
9259
+ }
9260
+
9261
+ // Fetch user data and store if found.
9262
+ $this->sync_user_by_current_install();
9263
+ }
9264
+
9265
  /**
9266
  * Update install only if changed.
9267
  *
9545
  $fs = self::get_instance_by_file( $plugin_file );
9546
 
9547
  if ( is_object( $fs ) ) {
9548
+ $fs->remove_sdk_reference();
9549
+
9550
  self::require_plugin_essentials();
9551
 
9552
  if ( is_plugin_active( $fs->_free_plugin_basename ) ||
11428
 
11429
  // Update current license.
11430
  if ( is_object( $this->_license ) ) {
11431
+ $license = $this->_get_license_by_id( $this->_license->id );
11432
+
11433
+ if ( is_object( $license ) ) {
11434
+ /**
11435
+ * `$license` can be `false` in case a user change action has just been completed and this method
11436
+ * has synced the `$this->_licenses` collection for the new user. In this case, the
11437
+ * `$this->_licenses` collection may have only the newly activated license that is associated with
11438
+ * the new user. `set_license` will eventually be called in the same request by the logic that
11439
+ * follows outside this method which will detect that the install's license has been updated, and
11440
+ * then `_update_site_license` will be called which in turn will call `set_license`.
11441
+ *
11442
+ * @author Leo Fajardo (@leorw)
11443
+ * @since 2.3.2
11444
+ */
11445
+ $this->set_license( $license );
11446
+ }
11447
  }
11448
 
11449
  return $this->_licenses;
11892
  function _update_site_license( $new_license ) {
11893
  $this->_logger->entrance();
11894
 
11895
+ /**
11896
+ * In case this call will be removed in the future, the `_sync_licenses()` method needs to be updated
11897
+ * accordingly so that it will also handle the case when an ownership change is done via license
11898
+ * activation.
11899
+ *
11900
+ * @author Leo Fajardo (@leorw)
11901
+ * @since 2.3.2
11902
+ */
11903
  $this->set_license( $new_license );
11904
 
11905
  if ( ! is_object( $new_license ) ) {
12348
  }
12349
 
12350
  $current_plan_order = - 1;
12351
+ $required_plan_order = PHP_INT_MAX;
12352
  for ( $i = 0, $len = count( $this->_plans ); $i < $len; $i ++ ) {
12353
  if ( $plan === $this->_plans[ $i ]->name ) {
12354
  $required_plan_order = $i;
12505
  fs_require_template( 'forms/resend-key.php', $vars );
12506
  }
12507
 
12508
+ /**
12509
+ * Returns a collection of IDs of installs that are associated with the context product and its add-ons, and activated with foreign licenses.
12510
+ *
12511
+ * @author Leo Fajardo (@leorw)
12512
+ * @since 2.3.2
12513
+ *
12514
+ * @return number[]
12515
+ */
12516
+ function get_installs_ids_with_foreign_licenses() {
12517
+ $installs = array();
12518
+
12519
+ if (
12520
+ is_object( $this->_license ) &&
12521
+ $this->_site->user_id != $this->_license->user_id
12522
+ ) {
12523
+ $installs[] = $this->_site->id;
12524
+ }
12525
+
12526
+ /**
12527
+ * Also try to get foreign licenses for the context product's add-ons.
12528
+ */
12529
+ $installs_by_slug_map = $this->get_parent_and_addons_installs_info();
12530
+
12531
+ foreach ( $installs_by_slug_map as $slug => $install_info ) {
12532
+ if ( $slug == $this->get_slug() ) {
12533
+ continue;
12534
+ }
12535
+
12536
+ $install = $install_info['install'];
12537
+ $license = $install_info['license'];
12538
+
12539
+ if (
12540
+ is_object( $license ) &&
12541
+ $install->user_id != $license->user_id
12542
+ ) {
12543
+ $installs[] = $install->id;
12544
+ }
12545
+ }
12546
+
12547
+ return $installs;
12548
+ }
12549
+
12550
+ /**
12551
+ * Displays the "Change User" dialog box when the user clicks on the "Change User" button on the "Account" page.
12552
+ *
12553
+ * @author Leo Fajardo (@leorw)
12554
+ * @since 2.3.2
12555
+ *
12556
+ * @param number[] $install_ids
12557
+ */
12558
+ function _add_user_change_dialog_box( $install_ids ) {
12559
+ $vars = array(
12560
+ 'id' => $this->_module_id,
12561
+ 'license_owners' => $this->fetch_installs_licenses_owners_data( $install_ids )
12562
+ );
12563
+
12564
+ fs_require_template( 'forms/user-change.php', $vars );
12565
+ }
12566
+
12567
  /**
12568
  * @author Leo Fajardo (@leorw)
12569
  * @since 2.3.1
12685
  return;
12686
  }
12687
 
12688
+ if (
12689
+ $this->has_premium_version() &&
12690
+ ! $this->is_premium() &&
12691
+ /**
12692
+ * Also handle the case when an upgrade was made using the free version.
12693
+ *
12694
+ * @author Leo Fajardo (@leorw)
12695
+ * @since 2.3.2
12696
+ */
12697
+ ! is_object( $this->_get_license() )
12698
+ ) {
12699
  // Only add license activation logic to the premium version, or in case of a serviceware plugin, also in the free version.
12700
  return;
12701
  }
12722
  $this->add_ajax_action( 'resend_license_key', array( &$this, '_resend_license_key_ajax_action' ) );
12723
  }
12724
 
12725
+ /**
12726
+ * Prepares page to include all required UI and logic for the "Change User" dialog.
12727
+ *
12728
+ * @author Leo Fajardo (@leorw)
12729
+ * @since 2.3.2
12730
+ */
12731
+ function _add_user_change_option() {
12732
+ if ( ! $this->should_handle_user_change() ) {
12733
+ return;
12734
+ }
12735
+
12736
+ if ( empty( $this->get_installs_ids_with_foreign_licenses() ) ) {
12737
+ // Handle user change only when the parent product or one of its add-ons is activated with a foreign license.
12738
+ return;
12739
+ }
12740
+
12741
+ // Add user change AJAX handler.
12742
+ $this->add_ajax_action( 'change_user', array( &$this, '_user_change_ajax_action' ) );
12743
+ }
12744
+
12745
+ /**
12746
+ * @author Leo Fajardo (@leorw)
12747
+ * @since 2.3.2
12748
+ */
12749
+ function should_handle_user_change() {
12750
+ if ( ! $this->is_user_admin() ) {
12751
+ // Only admins can change user.
12752
+ return false;
12753
+ }
12754
+
12755
+ if ( $this->is_addon() ) {
12756
+ return false;
12757
+ }
12758
+
12759
+ if ( ! $this->is_registered() ) {
12760
+ return false;
12761
+ }
12762
+
12763
+ if (
12764
+ $this->is_network_active() &&
12765
+ ( fs_is_network_admin() || ! $this->is_site_delegated_connection() )
12766
+ ) {
12767
+ // Handle only on site-level "Account" section for now.
12768
+ return false;
12769
+ }
12770
+
12771
+ return true;
12772
+ }
12773
+
12774
  /**
12775
  * @author Leo Fajardo (@leorw)
12776
  * @since 2.0.2
12876
  array(),
12877
  fs_request_get_bool( 'is_marketing_allowed', null ),
12878
  fs_request_get( 'blog_id', null ),
12879
+ fs_request_get( 'module_id', null, 'post' ),
12880
+ fs_request_get( 'user_id', null ),
12881
+ fs_request_get_bool( 'is_extensions_tracking_allowed', true )
12882
  );
12883
 
12884
  echo json_encode( $result );
12886
  exit;
12887
  }
12888
 
12889
+ /**
12890
+ * User change WP AJAX handler.
12891
+ *
12892
+ * @author Leo Fajardo (@leorw)
12893
+ * @since 2.3.2
12894
+ */
12895
+ function _user_change_ajax_action() {
12896
+ $this->_logger->entrance();
12897
+
12898
+ $this->check_ajax_referer( 'change_user' );
12899
+
12900
+ $new_email_address = trim( fs_request_get( 'email_address', '' ) );
12901
+ $new_user_id = fs_request_get( 'user_id' );
12902
+
12903
+ if ( empty( $new_email_address ) && ! FS_User::is_valid_id( $new_user_id ) ) {
12904
+ self::shoot_ajax_failure( fs_text_inline( 'Invalid new user ID or email address.', 'invalid-new-user-id-or-email', $this->get_slug() ) );
12905
+ }
12906
+
12907
+ $params = array();
12908
+
12909
+ if ( ! empty( $new_email_address ) ) {
12910
+ $params['user_email'] = $new_email_address;
12911
+ } else {
12912
+ $params['user_id'] = $new_user_id;
12913
+ }
12914
+
12915
+ $installs_info_by_slug_map = $this->get_parent_and_addons_installs_info();
12916
+ $install_ids = array();
12917
+
12918
+ foreach ( $installs_info_by_slug_map as $slug => $install_info ) {
12919
+ $install_ids[ $slug ] = $install_info['install']->id;
12920
+ }
12921
+
12922
+ $params['install_ids'] = implode( ',', array_values( $install_ids ) );
12923
+
12924
+ $install = $this->get_api_site_scope()->call( $this->add_show_pending( '/' ), 'put', $params );
12925
+
12926
+ if ( FS_Api::is_api_error( $install ) ) {
12927
+ $error = '';
12928
+
12929
+ if ( is_object( $install ) ) {
12930
+ switch ( $install->error->code ) {
12931
+ case 'user_exist':
12932
+ $error = (
12933
+ $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...' .
12934
+ $this->get_text_inline( 'Sorry, we could not complete the email update. Another user with the same email is already registered.', 'user-exist-message' ) . ' ' .
12935
+ sprintf( $this->get_text_inline( 'If you would like to give up the ownership of the %s\'s account to %s click the Change Ownership button.', 'user-exist-message_ownership' ), $this->_module_type, '<b>' . $new_email_address . '</b>' ) .
12936
+ sprintf(
12937
+ '<a style="line-height: 40px;" href="%s"><button class="button button-primary">%s &nbsp;&#10140;</button></a>',
12938
+ $this->get_account_url( 'change_owner', array(
12939
+ 'state' => 'init',
12940
+ 'candidate_email' => $new_email_address
12941
+ ) ),
12942
+ $this->get_text_inline( 'Change Ownership', 'change-ownership' )
12943
+ )
12944
+ );
12945
+ break;
12946
+ }
12947
+ }
12948
+
12949
+ if ( empty( $error ) ) {
12950
+ $error = FS_Api::is_api_error_object( $install ) ?
12951
+ $install->error->message :
12952
+ var_export( $install->error, true );
12953
+ }
12954
+
12955
+ self::shoot_ajax_failure( $error );
12956
+ } else {
12957
+ if (
12958
+ // If successful ownership change.
12959
+ $this->get_user()->id != $install->user_id ||
12960
+ ! empty( $new_email_address )
12961
+ ) {
12962
+ $this->complete_ownership_change_by_license( $install->user_id, $install_ids );
12963
+ }
12964
+ }
12965
+
12966
+ self::shoot_ajax_success();
12967
+ }
12968
+
12969
  /**
12970
  * A helper method to activate migrated licenses. If the product is network activated and integrated, the method will network activate the license.
12971
  *
13018
  * @param n