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 null|bool $is_marketing_allowed
13019
* @param null|int $blog_id
13020
* @param null|number $plugin_id
13021
+ * @param null|number $license_owner_id
13022
*
13023
* @return array {
13024
* @var bool $success
13031
$sites = array(),
13032
$is_marketing_allowed = null,
13033
$blog_id = null,
13034
+ $plugin_id = null,
13035
+ $license_owner_id = null,
13036
+ $is_extensions_tracking_allowed = true
13037
) {
13038
$this->_logger->entrance();
13039
13048
$this :
13049
$this->get_addon_instance( $plugin_id );
13050
13051
+ $this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
13052
+
13053
$error = false;
13054
$next_page = false;
13055
13123
'license_key' => $fs->apply_filters( 'license_key', $license_key )
13124
);
13125
13126
+ $install_ids = array();
13127
+
13128
+ $change_owner = FS_User::is_valid_id( $license_owner_id );
13129
+
13130
+ if ( $change_owner ) {
13131
+ $params['user_id'] = $license_owner_id;
13132
+
13133
+ $installs_info_by_slug_map = $fs->get_parent_and_addons_installs_info();
13134
+
13135
+ foreach ( $installs_info_by_slug_map as $slug => $install_info ) {
13136
+ $install_ids[ $slug ] = $install_info['install']->id;
13137
+ }
13138
+
13139
+ $params['install_ids'] = implode( ',', array_values( $install_ids ) );
13140
+ }
13141
+
13142
$api = $fs->get_api_site_scope();
13143
13144
$install = $api->call( $fs->add_show_pending( '/' ), 'put', $params );
13149
var_export( $install->error, true );
13150
} else {
13151
$fs->reconnect_locally( $has_valid_blog_id );
13152
+
13153
+ if (
13154
+ $change_owner &&
13155
+ // If successful ownership change.
13156
+ $fs->get_user()->id != $install->user_id
13157
+ ) {
13158
+ $fs->complete_ownership_change_by_license( $install->user_id, $install_ids );
13159
+ }
13160
}
13161
} else /* ( $fs->is_addon() && $fs->get_parent_instance()->is_registered() ) */ {
13162
$result = $fs->activate_license_on_site( $user, $license_key );
13174
13175
$fs->_sync_license( true, $has_valid_blog_id );
13176
13177
+ $this->maybe_sync_install_user();
13178
+
13179
$next_page = $fs->is_addon() ?
13180
$fs->get_parent_instance()->get_account_url() :
13181
$fs->get_account_url();
13282
return $result;
13283
}
13284
13285
+ /**
13286
+ * @author Leo Fajardo (@leorw)
13287
+ * @since 2.3.2
13288
+ *
13289
+ * @return array {
13290
+ * @key string Product slug.
13291
+ * @value array {
13292
+ * @property FS_Site $site
13293
+ * @property FS_Plugin_License $license
13294
+ * }
13295
+ * }
13296
+ */
13297
+ private function get_parent_and_addons_installs_info() {
13298
+ $fs = $this->is_addon() ?
13299
+ $this->get_parent_instance() :
13300
+ $this;
13301
+
13302
+ $installed_addons_ids = array();
13303
+
13304
+ $installed_addons_instances = $fs->get_installed_addons();
13305
+ foreach ( $installed_addons_instances as $instance ) {
13306
+ $installed_addons_ids[] = $instance->get_id();
13307
+ }
13308
+
13309
+ $addons_ids = array_unique( array_merge(
13310
+ $installed_addons_ids,
13311
+ $fs->get_updated_account_addons()
13312
+ ) );
13313
+
13314
+ // Add parent product info.
13315
+ $installs_info_by_slug_map = array(
13316
+ $fs->get_slug() => array(
13317
+ 'install' => $fs->get_site(),
13318
+ 'license' => $fs->_get_license()
13319
+ )
13320
+ );
13321
+
13322
+ foreach ( $addons_ids as $addon_id ) {
13323
+ $is_installed = isset( $installed_addons_ids_map[ $addon_id ] );
13324
+
13325
+ $addon_info = $fs->_get_addon_info( $addon_id, $is_installed );
13326
+
13327
+ if ( ! $addon_info['is_connected'] ) {
13328
+ // Add-on is not associated with an install entity.
13329
+ continue;
13330
+ }
13331
+
13332
+ $installs_info_by_slug_map[ $addon_info['slug'] ] = array(
13333
+ 'install' => $addon_info['site'],
13334
+ 'license' => isset( $addon_info['license'] ) ?
13335
+ $addon_info['license'] :
13336
+ null
13337
+ );
13338
+ }
13339
+
13340
+ return $installs_info_by_slug_map;
13341
+ }
13342
+
13343
/**
13344
* @author Leo Fajardo (@leorw)
13345
* @since 1.2.3.1
15778
/**
15779
* This is a special fault tolerance mechanism to handle a scenario that the user data is missing.
15780
*/
15781
+ $user = $this->sync_user_by_current_install();
15782
}
15783
15784
$this->_user = ( $user instanceof FS_User ) ?
15818
* @author Vova Feldman (@svovaf)
15819
* @since 2.0.0
15820
*
15821
+ * @param number|null $site_user_id
15822
+ *
15823
* @return \FS_User|mixed
15824
*/
15825
+ private function sync_user_by_current_install( $site_user_id = null ) {
15826
+ $site_user_id = FS_Site::is_valid_id( $site_user_id ) ?
15827
+ $site_user_id :
15828
+ $this->_site->user_id;
15829
+
15830
$api = $this->get_api_site_scope();
15831
15832
$uid = $this->get_anonymous_id();
15833
+ $request_path = "/users/{$site_user_id}.json?uid={$uid}";
15834
15835
$result = $api->get( $request_path, false, WP_FS__TIME_10_MIN_IN_SEC );
15836
16260
( isset( $decoded->is_marketing_allowed ) && ! is_null( $decoded->is_marketing_allowed ) ?
16261
$decoded->is_marketing_allowed :
16262
null ),
16263
+ ( isset( $decoded->is_extensions_tracking_allowed ) && ! is_null( $decoded->is_extensions_tracking_allowed ) ?
16264
+ $decoded->is_extensions_tracking_allowed :
16265
+ null ),
16266
$decoded->install_id,
16267
$decoded->install_public_key,
16268
$decoded->install_secret_key,
16276
( isset( $decoded->is_marketing_allowed ) && ! is_null( $decoded->is_marketing_allowed ) ?
16277
$decoded->is_marketing_allowed :
16278
null ),
16279
+ ( isset( $decoded->is_extensions_tracking_allowed ) && ! is_null( $decoded->is_extensions_tracking_allowed ) ?
16280
+ $decoded->is_extensions_tracking_allowed :
16281
+ null ),
16282
$decoded->installs,
16283
false
16284
);
16505
fs_request_get( 'user_public_key' ),
16506
fs_request_get( 'user_secret_key' ),
16507
fs_request_get_bool( 'is_marketing_allowed', null ),
16508
+ fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
16509
$pending_sites_info['blog_ids'],
16510
$pending_sites_info['license_key'],
16511
$pending_sites_info['trial_plan_id']
16516
fs_request_get( 'user_public_key' ),
16517
fs_request_get( 'user_secret_key' ),
16518
fs_request_get_bool( 'is_marketing_allowed', null ),
16519
+ fs_request_get_bool( 'is_extensions_tracking_allowed', null ),
16520
fs_request_get( 'install_id' ),
16521
fs_request_get( 'install_public_key' ),
16522
fs_request_get( 'install_secret_key' ),
16572
* @param string $user_public_key
16573
* @param string $user_secret_key
16574
* @param bool|null $is_marketing_allowed
16575
+ * @param bool|null $is_extensions_tracking_allowed Since 2.3.2
16576
* @param number $install_id
16577
* @param string $install_public_key
16578
* @param string $install_secret_key
16579
* @param bool $redirect
16580
+ * @param bool $auto_install Since 1.2.1.7 If `true` and setting up an account with a valid license, will redirect (or return a URL) to the account page with a special parameter to trigger the auto installation processes.
16581
*
16582
* @return string If redirect is `false`, returns the next page the user should be redirected to.
16583
*/
16586
$user_public_key,
16587
$user_secret_key,
16588
$is_marketing_allowed,
16589
+ $is_extensions_tracking_allowed,
16590
$install_id,
16591
$install_public_key,
16592
$install_secret_key,
16628
$this->disable_opt_in_notice_and_lock_user();
16629
}
16630
16631
+ if ( ! is_null( $is_extensions_tracking_allowed ) ) {
16632
+ $this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
16633
+ }
16634
+
16635
return $this->setup_account(
16636
$this->_user,
16637
$this->_site,
16650
* @param string $user_public_key
16651
* @param string $user_secret_key
16652
* @param bool|null $is_marketing_allowed
16653
+ * @param bool|null $is_extensions_tracking_allowed Since 2.3.2
16654
* @param array $site_ids
16655
* @param bool $license_key
16656
* @param bool $trial_plan_id
16663
$user_public_key,
16664
$user_secret_key,
16665
$is_marketing_allowed,
16666
+ $is_extensions_tracking_allowed,
16667
$site_ids,
16668
$license_key = false,
16669
$trial_plan_id = false,
16675
$this->disable_opt_in_notice_and_lock_user();
16676
}
16677
16678
+ if ( ! is_null( $is_extensions_tracking_allowed ) ) {
16679
+ $this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
16680
+ }
16681
+
16682
$sites = array();
16683
foreach ( $site_ids as $site_id ) {
16684
$sites[] = $this->get_site_info( array( 'blog_id' => $site_id ) );
16697
* @param string $user_public_key
16698
* @param string $user_secret_key
16699
* @param bool|null $is_marketing_allowed
16700
+ * @param bool|null $is_extensions_tracking_allowed Since 2.3.2
16701
* @param object[] $installs
16702
* @param bool $redirect
16703
+ * @param bool $auto_install Since 1.2.1.7 If `true` and setting up an account with a valid license, will redirect (or return a URL) to the account page with a special parameter to trigger the auto installation processes.
16704
*
16705
* @return string If redirect is `false`, returns the next page the user should be redirected to.
16706
*/
16709
$user_public_key,
16710
$user_secret_key,
16711
$is_marketing_allowed,
16712
+ $is_extensions_tracking_allowed,
16713
array $installs,
16714
$redirect = true,
16715
$auto_install = false
16720
$this->disable_opt_in_notice_and_lock_user();
16721
}
16722
16723
+ if ( ! is_null( $is_extensions_tracking_allowed ) ) {
16724
+ $this->update_extensions_tracking_flag( $is_extensions_tracking_allowed );
16725
+ }
16726
+
16727
$install_ids = array();
16728
16729
foreach ( $installs as $install ) {
16833
*/
16834
$license_key = fs_request_get( 'license_secret_key' );
16835
16836
+ $this->update_extensions_tracking_flag( fs_request_get_bool( 'is_extensions_tracking_allowed', true ) );
16837
+
16838
$this->install_with_current_user( $license_key );
16839
}
16840
}
18548
18549
$sites = self::get_all_sites( $this->_module_type, $network_level_or_blog_id );
18550
18551
+ if ( is_object( $this->_user ) && $this->_user->id != $site->user_id ) {
18552
+ $this->sync_user_by_current_install( $site->user_id );
18553
18554
+ $prev_stored_user_id = $this->_storage->get( 'prev_user_id', false, $network_level_or_blog_id );
18555
+
18556
+ if ( empty( $prev_stored_user_id ) &&
18557
+ is_object($this->_user) && $this->_user->id != $site->user_id
18558
+ ) {
18559
+ /**
18560
+ * Store the current user ID as the previous user ID so that the previous user can be used
18561
+ * as the install's owner while the new owner's details are not yet available.
18562
+ *
18563
+ * This will be executed only in the `replica` site. For example, there are 2 sites, namely `original`
18564
+ * and `replica`, then an ownership change was initiated and completed in the `original`, the `replica`
18565
+ * will be using the previous user until it is updated again (e.g.: until the next clone of `original`
18566
+ * into `replica`.
18567
+ *
18568
+ * @author Leo Fajardo (@leorw)
18569
+ */
18570
+ $this->_storage->store( 'prev_user_id', $sites[ $this->_slug ]->user_id, $network_level_or_blog_id );
18571
+ }
18572
}
18573
18574
$sites[ $this->_slug ] = $site_clone;
20400
20401
if ( $show_notice ) {
20402
$this->_admin_notices->add(
20403
+ sprintf( $this->is_only_premium() ?
20404
+ $this->get_text_inline( 'Your %s license was successfully deactivated.', 'license-deactivation-message_premium-only' ) :
20405
+ $this->get_text_inline( 'Your license was successfully deactivated, you are back to the %s plan.', 'license-deactivation-message' ),
20406
+ $this->get_plan_title()
20407
+ ),
20408
$this->get_text_inline( 'O.K', 'ok' )
20409
);
20410
}
21211
return true;
21212
}
21213
21214
+ /**
21215
+ * Completes ownership change by license.
21216
+ *
21217
+ * @author Leo Fajardo (@leorw)
21218
+ * @since 2.3.2
21219
+ *
21220
+ * @param number $user_id
21221
+ * @param array[string]number $install_ids_by_slug_map
21222
+ *
21223
+ */
21224
+ private function complete_ownership_change_by_license( $user_id, $install_ids_by_slug_map ) {
21225
+ $this->_logger->entrance();
21226
+
21227
+ $this->sync_user_by_current_install( $user_id );
21228
+
21229
+ $result = $this->get_api_user_scope( true )->get(
21230
+ "/installs.json?install_ids=" . implode( ',', $install_ids_by_slug_map )
21231
+ );
21232
+
21233
+ if ( $this->is_api_result_object( $result, 'installs' ) ) {
21234
+ $sites = self::get_all_sites( $this->get_module_type() );
21235
+ $install_ids_by_slug_map = array_flip( $install_ids_by_slug_map );
21236
+
21237
+ foreach ( $result->installs as $install ) {
21238
+ $site = new FS_Site( $install );
21239
+
21240
+ $sites[ $install_ids_by_slug_map[ $site->id ] ] = clone $site;
21241
+ }
21242
+
21243
+ $this->set_account_option( 'sites', $sites, true );
21244
+ }
21245
+ }
21246
+
21247
/**
21248
* Handle user name update.
21249
*
21412
// Alias.
21413
$oops_text = $this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...';
21414
21415
+ $is_network_action = $this->is_network_level_action();
21416
+ $blog_id = $this->is_network_level_site_specific_action();
21417
+ $is_parent_plugin_action = ( $plugin_id == $this->get_id() );
21418
21419
if ( is_numeric( $blog_id ) ) {
21420
$this->switch_to_blog( $blog_id );
21426
case 'opt_in':
21427
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
21428
21429
+ if ( $is_parent_plugin_action ) {
21430
if ( $is_network_action && ! empty( $blog_id ) ) {
21431
if ( ! $this->is_registered() ) {
21432
$this->install_with_user(
21449
case 'toggle_tracking':
21450
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
21451
21452
+ if ( $is_parent_plugin_action ) {
21453
if ( $is_network_action && ! empty( $blog_id ) ) {
21454
if ( $this->is_registered() ) {
21455
if ( $this->is_tracking_prohibited() ) {
21484
case 'delete_account':
21485
check_admin_referer( trim( "{$action}:{$blog_id}:{$install_id}", ':' ) );
21486
21487
+ $is_network_deletion = $is_network_action && empty( $blog_id );
21488
+
21489
+ if ( $is_parent_plugin_action ) {
21490
+ // Delete add-on installs if have any.
21491
+ $installed_addons = $this->get_installed_addons();
21492
+ foreach ( $installed_addons as $fs_addon ) {
21493
+ if ( $is_network_deletion ) {
21494
+ $fs_addon->delete_network_account_event();
21495
+ } else {
21496
+ $fs_addon->delete_account_event();
21497
+ }
21498
+ }
21499
+
21500
+ if ( $is_network_deletion ) {
21501
$this->delete_network_account_event();
21502
} else {
21503
$this->delete_account_event();
21513
} else {
21514
if ( $this->is_addon_activated( $plugin_id ) ) {
21515
$fs_addon = self::get_instance_by_id( $plugin_id );
21516
+
21517
+ if ( $is_network_deletion ) {
21518
+ $fs_addon->delete_network_account_event();
21519
+ } else {
21520
+ $fs_addon->delete_account_event();
21521
+ }
21522
21523
fs_redirect( $this->_get_admin_page_url( 'account' ) );
21524
}
22661
22662
$this->_logger->entrance();
22663
22664
+ /**
22665
+ * @author Vova Feldman (@svovaf)
22666
+ * @since 2.3.2 Allow opting out from usage-tracking for paid products too by giving the appropriate warning letting the user know the automatic updates mechanism cannot function without an ongoing connection to the licensing and updates engine.
22667
+ */
22668
+ /*if ( $this->is_premium() ) {
22669
// Don't add opt-in/out for premium code base.
22670
return;
22671
+ }*/
22672
+
22673
+ if ( $this->is_only_premium() && $this->is_free_plan() ) {
22674
+ // Don't add tracking links for premium-only products that were opted-in by relation (add-on or a parent product) before activating any license.
22675
+ return;
22676
}
22677
22678
if ( fs_is_network_admin() ) {
22725
return;
22726
}
22727
22728
+ if ( $this->add_ajax_action( 'update_tracking_permission', array( &$this, '_update_tracking_permission_callback' ) ) ) {
22729
+ return;
22730
+ }
22731
+
22732
$link_text_id = '';
22733
$url = '#';
22734
24383
*
24384
* @author Vova Feldman (@svovaf)
24385
*/
24386
+ self::shoot_ajax_success( array(
24387
+ 'is_marketing_allowed' => null,
24388
+ 'license_owner_id' => null
24389
+ ) );
24390
+ }
24391
+
24392
+ self::shoot_ajax_success( array(
24393
+ 'is_marketing_allowed' => $user_plugins[0]->is_marketing_allowed,
24394
+ 'license_owner_id' => ( isset( $user_plugins[0]->license_owner_id ) ? $user_plugins[0]->license_owner_id : null )
24395
+ ) );
24396
+ }
24397
+
24398
+ /**
24399
+ * @author Leo Fajardo (@leorw)
24400
+ * @since 2.3.2
24401
+ *
24402
+ * @param number[] $install_ids
24403
+ *
24404
+ * @return array {
24405
+ * An array of objects containing the installs' licenses owners data.
24406
+ *
24407
+ * @property number $id User ID.
24408
+ * @property string $email User email (can be masked email).
24409
+ * }
24410
+ */
24411
+ private function fetch_installs_licenses_owners_data( $install_ids ) {
24412
+ $this->_logger->entrance();
24413
+
24414
+ $response = $this->get_api_user_scope()->get(
24415
+ '/licenses_owners.json?install_ids=' . implode( ',', $install_ids )
24416
+ );
24417
+
24418
+ $license_owners = null;
24419
+
24420
+ if ( $this->is_api_result_object( $response, 'owners' ) ) {
24421
+ $license_owners = $response->owners;
24422
}
24423
24424
+ return $license_owners;
24425
}
24426
24427
/**
freemius/includes/class-fs-plugin-updater.php CHANGED
@@ -240,6 +240,12 @@
240
* @since 2.0.0
241
*/
242
private function add_transient_filters() {
243
add_filter( 'pre_set_site_transient_update_plugins', array(
244
&$this,
245
'pre_set_site_transient_update_plugins_filter'
240
* @since 2.0.0
241
*/
242
private function add_transient_filters() {
243
+ if ( $this->_fs->is_premium() && ! $this->_fs->is_tracking_allowed() ) {
244
+ $this->_logger->log( 'Opted out sites cannot receive automatic software updates.' );
245
+
246
+ return;
247
+ }
248
+
249
add_filter( 'pre_set_site_transient_update_plugins', array(
250
&$this,
251
'pre_set_site_transient_update_plugins_filter'
freemius/includes/class-fs-storage.php CHANGED
@@ -378,16 +378,17 @@
378
'require_license_activation' => 1,
379
380
// If not network activated OR delegated, then site level.
381
- 'activation_timestamp' => 2,
382
- 'expired_license_notice_shown' => 2,
383
- 'is_whitelabeled' => 2,
384
- 'last_license_key' => 2,
385
- 'last_license_user_id' => 2,
386
- 'prev_user_id' => 2,
387
- 'sticky_optin_added' => 2,
388
- 'uninstall_reason' => 2,
389
- 'is_pending_activation' => 2,
390
- 'pending_license_key' => 2,
391
392
// Site level options.
393
'is_anonymous' => 3,
378
'require_license_activation' => 1,
379
380
// If not network activated OR delegated, then site level.
381
+ 'activation_timestamp' => 2,
382
+ 'expired_license_notice_shown' => 2,
383
+ 'is_whitelabeled' => 2,
384
+ 'last_license_key' => 2,
385