All-in-One Video Gallery - Version 1.6.6

Version Description

  • Tweak: Updated Freemius SDK (2.3.1).
  • Tweak: Plugin backend access to users with the required capability.
  • Fix: M4V, MOV videos not working in the "AIOVG - Video Player" Gutenberg block.
  • Fix: WordPress 5.3 compatibility issues.
  • Fix: Autoptimize conflict issue.
  • Fix: [+] few minor bug fixes.
Download this release

Release Info

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

Code changes from version 1.6.5 to 1.6.6

Files changed (79) hide show
  1. README.txt +13 -3
  2. admin/admin.php +3 -3
  3. admin/assets/css/admin.css +105 -86
  4. admin/assets/js/admin.js +12 -8
  5. admin/partials/shortcode-builder.php +4 -3
  6. admin/partials/video-sources.php +17 -14
  7. admin/partials/video-tracks.php +6 -6
  8. admin/videos.php +23 -9
  9. all-in-one-video-gallery.php +2 -2
  10. blocks/blocks.php +9 -4
  11. freemius/assets/css/admin/dialog-boxes.css +1 -1
  12. freemius/assets/css/admin/plugins.css +1 -0
  13. freemius/assets/css/customizer.css +1 -1
  14. freemius/assets/img/all-in-one-video-gallery.png +0 -0
  15. freemius/includes/class-freemius.php +966 -213
  16. freemius/includes/class-fs-plugin-updater.php +26 -2
  17. freemius/includes/class-fs-storage.php +44 -40
  18. freemius/includes/customizer/class-fs-customizer-upsell-control.php +5 -1
  19. freemius/includes/entities/class-fs-entity.php +10 -0
  20. freemius/includes/entities/class-fs-plugin-license.php +33 -0
  21. freemius/includes/entities/class-fs-plugin.php +5 -0
  22. freemius/includes/entities/class-fs-pricing.php +16 -0
  23. freemius/includes/entities/class-fs-site.php +3 -3
  24. freemius/includes/entities/class-fs-subscription.php +136 -114
  25. freemius/includes/fs-core-functions.php +282 -217
  26. freemius/includes/fs-plugin-info-dialog.php +27 -6
  27. freemius/includes/managers/class-fs-admin-menu-manager.php +53 -32
  28. freemius/includes/managers/class-fs-cache-manager.php +1 -1
  29. freemius/includes/managers/class-fs-option-manager.php +35 -11
  30. freemius/includes/managers/class-fs-plugin-manager.php +3 -3
  31. freemius/languages/freemius-cs_CZ.mo +0 -0
  32. freemius/languages/freemius-cs_CZ.po +2760 -0
  33. freemius/languages/freemius-da_DK.mo +0 -0
  34. freemius/languages/freemius-da_DK.po +592 -804
  35. freemius/languages/freemius-en.mo +0 -0
  36. freemius/languages/freemius-en.po +415 -379
  37. freemius/languages/freemius-es_ES.mo +0 -0
  38. freemius/languages/freemius-es_ES.po +492 -454
  39. freemius/languages/freemius-fr_FR.mo +0 -0
  40. freemius/languages/freemius-fr_FR.po +492 -454
  41. freemius/languages/freemius-he_IL.mo +0 -0
  42. freemius/languages/freemius-he_IL.po +491 -453
  43. freemius/languages/freemius-hu_HU.mo +0 -0
  44. freemius/languages/freemius-hu_HU.po +491 -453
  45. freemius/languages/freemius-it_IT.mo +0 -0
  46. freemius/languages/freemius-it_IT.po +492 -454
  47. freemius/languages/freemius-ja_JP.mo +0 -0
  48. freemius/languages/freemius-ja_JP.po +492 -454
  49. freemius/languages/freemius-nl_NL.mo +0 -0
  50. freemius/languages/freemius-nl_NL.po +492 -454
  51. freemius/languages/freemius-ru_RU.mo +0 -0
  52. freemius/languages/freemius-ru_RU.po +491 -453
  53. freemius/languages/freemius-ta.mo +0 -0
  54. freemius/languages/freemius-ta.po +2548 -0
  55. freemius/languages/freemius.pot +414 -378
  56. freemius/start.php +1 -1
  57. freemius/templates/account.php +187 -116
  58. freemius/templates/account/partials/addon.php +123 -84
  59. freemius/templates/account/partials/site.php +45 -29
  60. freemius/templates/add-ons.php +501 -440
  61. freemius/templates/connect.php +3 -3
  62. freemius/templates/debug.php +759 -726
  63. freemius/templates/debug/scheduled-crons.php +1 -1
  64. freemius/templates/forms/data-debug-mode.php +213 -0
  65. freemius/templates/forms/license-activation.php +12 -14
  66. freemius/templates/forms/optout.php +4 -2
  67. freemius/templates/forms/subscription-cancellation.php +1 -1
  68. freemius/templates/powered-by.php +5 -2
  69. freemius/templates/pricing.php +1 -0
  70. freemius/templates/tabs.php +2 -2
  71. includes/functions.php +48 -40
  72. includes/init.php +1 -1
  73. languages/all-in-one-video-gallery.pot +360 -232
  74. public/assets/css/public.css +12 -12
  75. public/categories.php +3 -2
  76. public/public.php +10 -11
  77. public/templates/player-gdpr.php +2 -1
  78. public/templates/player-html5.php +1 -1
  79. public/templates/player-iframe.php +2 -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.2
8
Requires PHP: 5.3.0
9
- Stable tag: 1.6.5
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 import videos from YouTube playlist, channel, etc.
46
* Custom Logo & Branding
47
* Custom Context Menu
@@ -109,6 +110,15 @@ Please describe your issue and submit a ticket on our plugin support forum, you
109
110
== Changelog ==
111
112
= 1.6.5 =
113
114
* New: Plugin Dashboard.
@@ -228,6 +238,6 @@ Please describe your issue and submit a ticket on our plugin support forum, you
228
229
== Upgrade Notice ==
230
231
- = 1.6.5 =
232
233
Introduces several bug fixes, new features & enhancements. [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.3
8
Requires PHP: 5.3.0
9
+ Stable tag: 1.6.6
10
License: GPLv2 or later
11
License URI: http://www.gnu.org/licenses/gpl-2.0.html
12
42
43
**Premium Features**
44
45
+ * Auto Thumbnail Generator
46
* Auto import videos from YouTube playlist, channel, etc.
47
* Custom Logo & Branding
48
* Custom Context Menu
110
111
== Changelog ==
112
113
+ = 1.6.6 =
114
+
115
+ * Tweak: Updated Freemius SDK (2.3.1).
116
+ * Tweak: Plugin backend access to users with the required capability.
117
+ * Fix: M4V, MOV videos not working in the "AIOVG - Video Player" Gutenberg block.
118
+ * Fix: WordPress 5.3 compatibility issues.
119
+ * Fix: Autoptimize conflict issue.
120
+ * Fix: [+] few minor bug fixes.
121
+
122
= 1.6.5 =
123
124
* New: Plugin Dashboard.
238
239
== Upgrade Notice ==
240
241
+ = 1.6.6 =
242
243
Introduces several bug fixes, new features & enhancements. [See changelog](https://wordpress.org/plugins/all-in-one-video-gallery/#developers)
admin/admin.php CHANGED
@@ -153,7 +153,7 @@ class AIOVG_Admin {
153
AIOVG_PLUGIN_SLUG . '-admin',
154
'aiovg_admin',
155
array(
156
- 'ajax_nonce' => wp_create_nonce( 'aiovg_admin_ajax_nonce' ),
157
'i18n' => array(
158
'no_issues_slected' => __( 'Please select at least one issue.', 'all-in-one-video-gallery' )
159
)
@@ -214,7 +214,7 @@ class AIOVG_Admin {
214
add_menu_page(
215
__( 'All-in-One Video Gallery', 'all-in-one-video-gallery' ),
216
__( 'Video Gallery', 'all-in-one-video-gallery' ),
217
- 'edit_others_aiovg_videos',
218
'all-in-one-video-gallery',
219
array( $this, 'display_dashboard_content' ),
220
'dashicons-playlist-video',
@@ -225,7 +225,7 @@ class AIOVG_Admin {
225
'all-in-one-video-gallery',
226
__( 'All-in-One Video Gallery - Dashboard', 'all-in-one-video-gallery' ),
227
__( 'Dashboard', 'all-in-one-video-gallery' ),
228
- 'edit_others_aiovg_videos',
229
'all-in-one-video-gallery',
230
array( $this, 'display_dashboard_content' )
231
);
153
AIOVG_PLUGIN_SLUG . '-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
)
214
add_menu_page(
215
__( 'All-in-One Video Gallery', 'all-in-one-video-gallery' ),
216
__( 'Video Gallery', 'all-in-one-video-gallery' ),
217
+ 'manage_aiovg_options',
218
'all-in-one-video-gallery',
219
array( $this, 'display_dashboard_content' ),
220
'dashicons-playlist-video',
225
'all-in-one-video-gallery',
226
__( 'All-in-One Video Gallery - Dashboard', 'all-in-one-video-gallery' ),
227
__( 'Dashboard', 'all-in-one-video-gallery' ),
228
+ 'manage_aiovg_options',
229
'all-in-one-video-gallery',
230
array( $this, 'display_dashboard_content' )
231
);
admin/assets/css/admin.css CHANGED
@@ -3,10 +3,44 @@
3
* Global
4
*
5
*--------------------------------------------------------------------------------------------*/
6
.aiovg-text-center {
7
text-align: center;
8
}
9
10
.aiovg-text-error {
11
color:#b31105;
12
}
@@ -37,17 +71,19 @@
37
margin-right: 5px !important;
38
}
39
40
- .aiovg-radio.horizontal,
41
- .aiovg-checkbox.horizontal {
42
- overflow: hidden;
43
- }
44
-
45
.aiovg-radio.horizontal li,
46
.aiovg-checkbox.horizontal li {
47
float: left;
48
margin-right: 20px;
49
}
50
51
.aiovg-checklist {
52
max-height: 100px;
53
padding: 5px 10px;
@@ -70,26 +106,12 @@
70
line-height: 1;
71
}
72
73
- .aiovg-media-uploader {
74
- position: relative;
75
- }
76
-
77
.aiovg-media-uploader .aiovg-upload-media {
78
- position: absolute;
79
- display: -webkit-flex; /* Safari */
80
- display: flex;
81
- top: 0;
82
- right: 0;
83
- height: 100%;
84
- padding: 0 10px;
85
- -webkit-align-items: center; /* Safari */
86
- align-items: center;
87
}
88
89
- .aiovg-media-uploader a,
90
- .aiovg-media-uploader a:hover,
91
- .aiovg-media-uploader a:focus {
92
- text-decoration: none;
93
}
94
95
.aiovg-pipe-separator {
@@ -125,16 +147,30 @@
125
color: #3c763d;
126
}
127
128
.aiovg-modal {
129
position: relative;
130
width: auto;
131
max-width: 640px;
132
margin: 32px auto;
133
- padding: 20px;
134
background: #FFF;
135
}
136
137
- @media (max-width: 767px) {
138
.aiovg-hidden-xs {
139
display: none !important;
140
}
@@ -145,22 +181,22 @@
145
146
.aiovg-checklist li {
147
margin: 7px 0;
148
- }
149
}
150
151
- @media (min-width: 768px) and (max-width: 991px) {
152
.aiovg-hidden-sm {
153
display: none !important;
154
}
155
}
156
157
- @media (min-width: 992px) and (max-width: 1199px) {
158
.aiovg-hidden-md {
159
display: none !important;
160
}
161
}
162
163
- @media (min-width: 1200px) {
164
.aiovg-hidden-lg {
165
display: none !important;
166
}
@@ -278,6 +314,17 @@
278
display: inline-block;
279
}
280
281
.aiovg-shortcode-control-title,
282
.aiovg-shortcode-control-id,
283
.aiovg-shortcode-control-mp4,
@@ -332,6 +379,14 @@
332
display: none;
333
}
334
335
@media only screen and (min-width: 768px) {
336
#aiovg-shortcode-builder .aiovg-left-col {
337
width: 60%;
@@ -355,7 +410,7 @@
355
margin: 7px 0;
356
}
357
358
- #aiovg-issues input[type=checkbox] {
359
margin: 0;
360
}
361
@@ -380,9 +435,10 @@ table.aiovg-table {
380
}
381
382
table.aiovg-table td {
383
- padding: 13px 15px;
384
border-top: 0 none;
385
- border-bottom: 1px solid #F5F5F5;
386
}
387
388
table.aiovg-table td.label {
@@ -390,70 +446,23 @@ table.aiovg-table td.label {
390
background: #F9F9F9;
391
border-right: 1px solid #E1E1E1;
392
border-bottom: 1px solid #F0F0F0;
393
- text-align: center;
394
- vertical-align: middle;
395
}
396
397
table.aiovg-table label {
398
- display: block;
399
- margin: 0 0 3px;
400
- padding: 0;
401
- color: #333;
402
- font-size: 13px;
403
- line-height: 1.4em;
404
- }
405
-
406
- table.aiovg-table span.required {
407
- display: inline;
408
- margin-left: 3px;
409
- color: #F00;
410
- }
411
-
412
- table.aiovg-table td.label p {
413
- display: block;
414
- margin: 3px 0 0 !important;
415
- padding: 0 !important;
416
- color: #899194;
417
- font-size: 12px;
418
- font-style: normal;
419
- line-height: 16px;
420
}
421
422
table.aiovg-table input[type="text"],
423
table.aiovg-table textarea,
424
table.aiovg-table select {
425
- width: 99.95%;
426
- padding: 3px 5px;
427
- outline: none;
428
- }
429
-
430
- table.aiovg-table input[type="text"]:focus,
431
- table.aiovg-table textarea:focus,
432
- table.aiovg-table select:focus {
433
- border-color: #98B6CB;
434
- }
435
-
436
- table.aiovg-table input::placeholder,
437
- table.aiovg-table textarea::placeholder {
438
- color: #BBB;
439
- }
440
-
441
- table.aiovg-table .aiovg-input-wrap {
442
- position: relative;
443
- overflow: hidden;
444
- }
445
-
446
- table.aiovg-table .aiovg-input-wrap input[type="text"] {
447
- height: 29px;
448
- margin: 0;
449
- }
450
-
451
- table.aiovg-table select {
452
- padding: 2px;
453
}
454
455
- table.aiovg-table option {
456
- padding: 3px;
457
}
458
459
table.aiovg-table .aiovg-handle {
@@ -462,7 +471,13 @@ table.aiovg-table .aiovg-handle {
462
cursor: move;
463
}
464
465
- @media (max-width: 767px) {
466
.aiovg-tracks-row td {
467
display: block !important;
468
border-bottom: none !important;
@@ -487,6 +502,10 @@ table.aiovg-table .aiovg-handle {
487
margin-top: 2em;
488
}
489
490
.aiovg-settings .search {
491
background-color: transparent;
492
}
3
* Global
4
*
5
*--------------------------------------------------------------------------------------------*/
6
+ .aiovg-no-margin {
7
+ margin: 0;
8
+ }
9
+
10
+ .aiovg-no-padding {
11
+ padding: 0;
12
+ }
13
+
14
+ .aiovg-pull-left {
15
+ float: left;
16
+ }
17
+
18
+ .aiovg-pull-right {
19
+ float: right;
20
+ }
21
+
22
+ .aiovg-clearfix {
23
+ display: block;
24
+ content: "";
25
+ clear: both;
26
+ }
27
+
28
+ .aiovg-text-left {
29
+ text-align: left;
30
+ }
31
+
32
+ .aiovg-text-right {
33
+ text-align: right;
34
+ }
35
+
36
.aiovg-text-center {
37
text-align: center;
38
}
39
40
+ .aiovg-text-muted {
41
+ color:#999;
42
+ }
43
+
44
.aiovg-text-error {
45
color:#b31105;
46
}
71
margin-right: 5px !important;
72
}
73
74
.aiovg-radio.horizontal li,
75
.aiovg-checkbox.horizontal li {
76
float: left;
77
margin-right: 20px;
78
}
79
80
+ .aiovg-radio.horizontal:after,
81
+ .aiovg-checkbox.horizontal:after {
82
+ display: block;
83
+ content: "";
84
+ clear: both;
85
+ }
86
+
87
.aiovg-checklist {
88
max-height: 100px;
89
padding: 5px 10px;
106
line-height: 1;
107
}
108
109
.aiovg-media-uploader .aiovg-upload-media {
110
+ display: inline;
111
}
112
113
+ .branch-5-3 .aiovg-upload-media .button {
114
+ margin: 2px;
115
}
116
117
.aiovg-pipe-separator {
147
color: #3c763d;
148
}
149
150
+ .aiovg-ajax-status span {
151
+ line-height: 28px;
152
+ margin: 0 7px;
153
+ }
154
+
155
+ .aiovg-ajax-status .spinner {
156
+ float: none;
157
+ visibility: visible;
158
+ }
159
+
160
.aiovg-modal {
161
position: relative;
162
width: auto;
163
max-width: 640px;
164
margin: 32px auto;
165
+ padding: 15px;
166
background: #FFF;
167
}
168
169
+ .aiovg-modal .aiovg-notice {
170
+ margin-top: 28px;
171
+ }
172
+
173
+ @media only screen and (max-width: 767px) {
174
.aiovg-hidden-xs {
175
display: none !important;
176
}
181
182
.aiovg-checklist li {
183
margin: 7px 0;
184
+ }
185
}
186
187
+ @media only screen and (min-width: 768px) and (max-width: 991px) {
188
.aiovg-hidden-sm {
189
display: none !important;
190
}
191
}
192
193
+ @media only screen and (min-width: 992px) and (max-width: 1199px) {
194
.aiovg-hidden-md {
195
display: none !important;
196
}
197
}
198
199
+ @media only screen and (min-width: 1200px) {
200
.aiovg-hidden-lg {
201
display: none !important;
202
}
314
display: inline-block;
315
}
316
317
+ .aiovg-shortcode-control input[type="text"],
318
+ .aiovg-shortcode-control textarea,
319
+ .aiovg-shortcode-control select {
320
+ width: 99.95%;
321
+ max-width: inherit;
322
+ }
323
+
324
+ .aiovg-shortcode-control .aiovg-media-uploader input[type="text"] {
325
+ width: 75%;
326
+ }
327
+
328
.aiovg-shortcode-control-title,
329
.aiovg-shortcode-control-id,
330
.aiovg-shortcode-control-mp4,
379
display: none;
380
}
381
382
+ @media only screen and (max-width: 767px) {
383
+ .aiovg-shortcode-control .aiovg-media-uploader input[type="text"] {
384
+ display: block;
385
+ width: 100%;
386
+ margin: 7px 0;
387
+ }
388
+ }
389
+
390
@media only screen and (min-width: 768px) {
391
#aiovg-shortcode-builder .aiovg-left-col {
392
width: 60%;
410
margin: 7px 0;
411
}
412
413
+ #aiovg-issues input[type="checkbox"] {
414
margin: 0;
415
}
416
435
}
436
437
table.aiovg-table td {
438
+ padding: 10px;
439
border-top: 0 none;
440
+ border-bottom: 1px solid #F5F5F5;
441
+ vertical-align: middle;
442
}
443
444
table.aiovg-table td.label {
446
background: #F9F9F9;
447
border-right: 1px solid #E1E1E1;
448
border-bottom: 1px solid #F0F0F0;
449
+ text-align: right;
450
+ vertical-align: top;
451
}
452
453
table.aiovg-table label {
454
+ font-size: 14px;
455
}
456
457
table.aiovg-table input[type="text"],
458
table.aiovg-table textarea,
459
table.aiovg-table select {
460
+ width: 99.95%;
461
+ max-width: inherit;
462
}
463
464
+ table.aiovg-table .aiovg-media-uploader input[type="text"] {
465
+ width: 75%;
466
}
467
468
table.aiovg-table .aiovg-handle {
471
cursor: move;
472
}
473
474
+ @media only screen and (max-width: 767px) {
475
+ table.aiovg-table .aiovg-media-uploader input[type="text"] {
476
+ display: block;
477
+ width: 100%;
478
+ margin: 7px 0;
479
+ }
480
+
481
.aiovg-tracks-row td {
482
display: block !important;
483
border-bottom: none !important;
502
margin-top: 2em;
503
}
504
505
+ .aiovg-settings .form-table .button {
506
+ margin: 2px;
507
+ }
508
+
509
.aiovg-settings .search {
510
background-color: transparent;
511
}
admin/assets/js/admin.js CHANGED
@@ -49,7 +49,7 @@
49
$elem.prev( '.aiovg-url' ).val( attachment.url );
50
break;
51
default:
52
- $elem.closest( '.aiovg-media-uploader' ).find( 'input[type=text]' ).val( attachment.url );
53
};
54
});
55
@@ -80,11 +80,13 @@
80
* @since 1.0.0
81
*/
82
function aiovg_widget_color_picker( widget ) {
83
- widget.find( '.aiovg-color-picker-field' ).wpColorPicker( {
84
- change: _.throttle( function() { // For Customizer
85
- $( this ).trigger( 'change' );
86
- }, 3000 )
87
- });
88
}
89
90
function on_aiovg_widget_update( event, widget ) {
@@ -98,14 +100,16 @@
98
*/
99
$(function() {
100
101
- // Common: Upload Media
102
$( '.aiovg-upload-media' ).on( 'click', function( e ) {
103
e.preventDefault();
104
aiovg_render_media_uploader( $( this ), 'default' );
105
});
106
107
// Common: Initiate color picker
108
- $( '.aiovg-color-picker' ).wpColorPicker();
109
110
// Common: Initialize the popup
111
$( '.aiovg-modal-button' ).magnificPopup({
49
$elem.prev( '.aiovg-url' ).val( attachment.url );
50
break;
51
default:
52
+ $elem.closest( '.aiovg-media-uploader' ).find( 'input[type=text]' ).val( attachment.url ).trigger( 'file.uploaded' );
53
};
54
});
55
80
* @since 1.0.0
81
*/
82
function aiovg_widget_color_picker( widget ) {
83
+ if ( $.fn.wpColorPicker ) {
84
+ widget.find( '.aiovg-color-picker-field' ).wpColorPicker( {
85
+ change: _.throttle( function() { // For Customizer
86
+ $( this ).trigger( 'change' );
87
+ }, 3000 )
88
+ });
89
+ }
90
}
91
92
function on_aiovg_widget_update( event, widget ) {
100
*/
101
$(function() {
102
103
+ // Common: Upload Files
104
$( '.aiovg-upload-media' ).on( 'click', function( e ) {
105
e.preventDefault();
106
aiovg_render_media_uploader( $( this ), 'default' );
107
});
108
109
// Common: Initiate color picker
110
+ if ( $.fn.wpColorPicker ) {
111
+ $( '.aiovg-color-picker' ).wpColorPicker();
112
+ }
113
114
// Common: Initialize the popup
115
$( '.aiovg-modal-button' ).magnificPopup({
admin/partials/shortcode-builder.php CHANGED
@@ -49,6 +49,7 @@ if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
49
<!-- Shortcode Selector -->
50
<div id="aiovg-shortcode-selector">
51
<p class="about-description"><?php esc_html_e( 'Select a shortcode type', 'all-in-one-video-gallery' ); ?></p>
52
<ul class="aiovg-radio horizontal">
53
<?php
54
foreach ( $fields as $shortcode => $params ) {
@@ -60,7 +61,7 @@ if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
60
);
61
}
62
?>
63
- </ul>
64
</div>
65
66
<!-- Shortcode Builder -->
@@ -148,8 +149,8 @@ if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
148
<div class="aiovg-media-uploader">
149
<input type="text" name="<?php echo esc_attr( $field['name'] ); ?>" class="aiovg-shortcode-field widefat" value="<?php echo esc_attr( $field['value'] ); ?>" data-default="<?php echo esc_attr( $field['value'] ); ?>" />
150
<div class="aiovg-upload-media hide-if-no-js">
151
- <a href="javascript:;" id="aiovg-upload-<?php echo esc_attr( $field['name'] ); ?>" data-format="<?php echo esc_attr( $field['name'] ); ?>">
152
- <small><?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?></small>
153
</a>
154
</div>
155
</div>
49
<!-- Shortcode Selector -->
50
<div id="aiovg-shortcode-selector">
51
<p class="about-description"><?php esc_html_e( 'Select a shortcode type', 'all-in-one-video-gallery' ); ?></p>
52
+
53
<ul class="aiovg-radio horizontal">
54
<?php
55
foreach ( $fields as $shortcode => $params ) {
61
);
62
}
63
?>
64
+ </ul>
65
</div>
66
67
<!-- Shortcode Builder -->
149
<div class="aiovg-media-uploader">
150
<input type="text" name="<?php echo esc_attr( $field['name'] ); ?>" class="aiovg-shortcode-field widefat" value="<?php echo esc_attr( $field['value'] ); ?>" data-default="<?php echo esc_attr( $field['value'] ); ?>" />
151
<div class="aiovg-upload-media hide-if-no-js">
152
+ <a href="javascript:;" id="aiovg-upload-<?php echo esc_attr( $field['name'] ); ?>" class="button button-secondary" data-format="<?php echo esc_attr( $field['name'] ); ?>">
153
+ <?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?>
154
</a>
155
</div>
156
</div>
admin/partials/video-sources.php CHANGED
@@ -14,11 +14,11 @@
14
<tbody>
15
<tr>
16
<td class="label aiovg-hidden-xs">
17
- <label><?php esc_html_e( 'Type', 'all-in-one-video-gallery' ); ?></label>
18
</td>
19
<td>
20
<p class="aiovg-hidden-sm aiovg-hidden-md aiovg-hidden-lg">
21
- <strong><?php esc_html_e( 'Type', 'all-in-one-video-gallery' ); ?></strong>
22
</p>
23
24
<select name="type" id="aiovg-video-type" class="select">
@@ -33,17 +33,18 @@
33
</tr>
34
<tr class="aiovg-toggle-fields aiovg-type-default">
35
<td class="label aiovg-hidden-xs">
36
- <label><?php esc_html_e( 'MP4', 'all-in-one-video-gallery' ); ?></label>
37
</td>
38
<td>
39
<p class="aiovg-hidden-sm aiovg-hidden-md aiovg-hidden-lg">
40
- <strong><?php esc_html_e( 'MP4', 'all-in-one-video-gallery' ); ?></strong>
41
</p>
42
43
<div class="aiovg-input-wrap aiovg-media-uploader">
44
- <input type="text" name="mp4" id="aiovg-mp4" class="text" placeholder="<?php esc_attr_e( 'Enter your direct file URL (OR) upload your file using the link here', 'all-in-one-video-gallery' ); ?> &rarr;" value="<?php echo esc_attr( $mp4 ); ?>" />
45
<div class="aiovg-upload-media hide-if-no-js">
46
- <a href="javascript:;" id="aiovg-upload-mp4" data-format="mp4">
47
<?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?>
48
</a>
49
</div>
@@ -77,9 +78,9 @@
77
</p>
78
79
<div class="aiovg-input-wrap aiovg-media-uploader">
80
- <input type="text" name="webm" id="aiovg-webm" class="text" placeholder="<?php esc_attr_e( 'Enter your direct file URL (OR) upload your file using the link here', 'all-in-one-video-gallery' ); ?> &rarr;" value="<?php echo esc_attr( $webm ); ?>" />
81
<div class="aiovg-upload-media hide-if-no-js">
82
- <a href="javascript:;" id="aiovg-upload-webm" data-format="webm">
83
<?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?>
84
</a>
85
</div>
@@ -96,9 +97,9 @@
96
</p>
97
98
<div class="aiovg-input-wrap aiovg-media-uploader">
99
- <input type="text" name="ogv" id="aiovg-ogv" class="text" placeholder="<?php esc_attr_e( 'Enter your direct file URL (OR) upload your file using the link here', 'all-in-one-video-gallery' ); ?> &rarr;" value="<?php echo esc_attr( $ogv ); ?>" />
100
<div class="aiovg-upload-media hide-if-no-js">
101
- <a href="javascript:;" id="aiovg-upload-ogv" data-format="ogv">
102
<?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?>
103
</a>
104
</div>
@@ -183,14 +184,16 @@
183
<strong><?php esc_html_e( 'Image', 'all-in-one-video-gallery' ); ?></strong>
184
</p>
185
186
- <div class="aiovg-input-wrap aiovg-media-uploader">
187
- <input type="text" name="image" id="aiovg-image" class="text" placeholder="<?php esc_attr_e( 'Enter your direct file URL (OR) upload your file using the link here', 'all-in-one-video-gallery' ); ?> &rarr;" value="<?php echo esc_attr( $image ); ?>" />
188
<div class="aiovg-upload-media hide-if-no-js">
189
- <a href="javascript:;" id="aiovg-upload-image" data-format="image">
190
<?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?>
191
</a>
192
</div>
193
- </div>
194
</td>
195
</tr>
196
<tr>
14
<tbody>
15
<tr>
16
<td class="label aiovg-hidden-xs">
17
+ <label><?php esc_html_e( 'Source Type', 'all-in-one-video-gallery' ); ?></label>
18
</td>
19
<td>
20
<p class="aiovg-hidden-sm aiovg-hidden-md aiovg-hidden-lg">
21
+ <strong><?php esc_html_e( 'Source Type', 'all-in-one-video-gallery' ); ?></strong>
22
</p>
23
24
<select name="type" id="aiovg-video-type" class="select">
33
</tr>
34
<tr class="aiovg-toggle-fields aiovg-type-default">
35
<td class="label aiovg-hidden-xs">
36
+ <label><?php esc_html_e( 'Video', 'all-in-one-video-gallery' ); ?></label>
37
+ <div class="aiovg-text-muted">(mp4, m4v, mov)</div>
38
</td>
39
<td>
40
<p class="aiovg-hidden-sm aiovg-hidden-md aiovg-hidden-lg">
41
+ <strong><?php esc_html_e( 'Video', 'all-in-one-video-gallery' ); ?></strong> <span class="aiovg-text-muted">(mp4, m4v, mov)</span>
42
</p>
43
44
<div class="aiovg-input-wrap aiovg-media-uploader">
45
+ <input type="text" name="mp4" id="aiovg-mp4" class="text" placeholder="<?php esc_attr_e( 'Enter your direct file URL (OR) upload your file using the button here', 'all-in-one-video-gallery' ); ?> &rarr;" value="<?php echo esc_attr( $mp4 ); ?>" />
46
<div class="aiovg-upload-media hide-if-no-js">
47
+ <a href="javascript:;" id="aiovg-upload-mp4" class="button button-secondary" data-format="mp4">
48
<?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?>
49
</a>
50
</div>
78
</p>
79
80
<div class="aiovg-input-wrap aiovg-media-uploader">
81
+ <input type="text" name="webm" id="aiovg-webm" class="text" placeholder="<?php esc_attr_e( 'Enter your direct file URL (OR) upload your file using the button here', 'all-in-one-video-gallery' ); ?> &rarr;" value="<?php echo esc_attr( $webm ); ?>" />
82
<div class="aiovg-upload-media hide-if-no-js">
83
+ <a href="javascript:;" id="aiovg-upload-webm" class="button button-secondary" data-format="webm">
84
<?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?>
85
</a>
86
</div>
97
</p>
98
99
<div class="aiovg-input-wrap aiovg-media-uploader">
100
+ <input type="text" name="ogv" id="aiovg-ogv" class="text" placeholder="<?php esc_attr_e( 'Enter your direct file URL (OR) upload your file using the button here', 'all-in-one-video-gallery' ); ?> &rarr;" value="<?php echo esc_attr( $ogv ); ?>" />
101
<div class="aiovg-upload-media hide-if-no-js">
102
+ <a href="javascript:;" id="aiovg-upload-ogv" class="button button-secondary" data-format="ogv">
103
<?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?>
104
</a>
105
</div>
184
<strong><?php esc_html_e( 'Image', 'all-in-one-video-gallery' ); ?></strong>
185
</p>
186
187
+ <div id="aiovg-image-uploader" class="aiovg-input-wrap aiovg-media-uploader">
188
+ <input type="text" name="image" id="aiovg-image" class="text" placeholder="<?php esc_attr_e( 'Enter your direct file URL (OR) upload your file using the button here', 'all-in-one-video-gallery' ); ?> &rarr;" value="<?php echo esc_attr( $image ); ?>" />
189
<div class="aiovg-upload-media hide-if-no-js">
190
+ <a href="javascript:;" id="aiovg-upload-image" class="button button-secondary" data-format="image">
191
<?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?>
192
</a>
193
</div>
194
+ </div>
195
+
196
+ <?php do_action( 'aiovg_admin_after_image_field' ); ?>
197
</td>
198
</tr>
199
<tr>
admin/partials/video-tracks.php CHANGED
@@ -20,7 +20,7 @@
20
</tr>
21
<?php foreach ( $tracks as $key => $track ) : ?>
22
<tr class="aiovg-tracks-row">
23
- <td class="aiovg-handle aiovg-hidden-xs"><span class="dashicons dashicons-sort"></span></td>
24
<td>
25
<p class="aiovg-hidden-sm aiovg-hidden-md aiovg-hidden-lg"><strong><?php esc_html_e( 'File URL', 'all-in-one-video-gallery' ); ?></strong></p>
26
<div class="aiovg-input-wrap">
@@ -40,11 +40,11 @@
40
</div>
41
</td>
42
<td>
43
- <p class="hide-if-no-js">
44
<a class="aiovg-upload-track" href="javascript:;"><?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?></a>
45
<span class="aiovg-pipe-separator">|</span>
46
<a class="aiovg-delete-track" href="javascript:;"><?php esc_html_e( 'Delete', 'all-in-one-video-gallery' ); ?></a>
47
- </p>
48
</td>
49
</tr>
50
<?php endforeach; ?>
@@ -56,7 +56,7 @@
56
57
<table id="aiovg-tracks-clone" style="display: none;">
58
<tr class="aiovg-tracks-row">
59
- <td class="aiovg-handle aiovg-hidden-xs"><span class="dashicons dashicons-sort"></span></td>
60
<td>
61
<p class="aiovg-hidden-sm aiovg-hidden-md aiovg-hidden-lg"><strong><?php esc_html_e( 'File URL', 'all-in-one-video-gallery' ); ?></strong></p>
62
<div class="aiovg-input-wrap">
@@ -76,11 +76,11 @@
76
</div>
77
</td>
78
<td>
79
- <p class="hide-if-no-js">
80
<a class="aiovg-upload-track" href="javascript:;"><?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?></a>
81
<span class="aiovg-pipe-separator">|</span>
82
<a class="aiovg-delete-track" href="javascript:;"><?php esc_html_e( 'Delete', 'all-in-one-video-gallery' ); ?></a>
83
- </p>
84
</td>
85
</tr>
86
</table>
20
</tr>
21
<?php foreach ( $tracks as $key => $track ) : ?>
22
<tr class="aiovg-tracks-row">
23
+ <td class="aiovg-handle aiovg-hidden-xs"><span class="dashicons dashicons-move"></span></td>
24
<td>
25
<p class="aiovg-hidden-sm aiovg-hidden-md aiovg-hidden-lg"><strong><?php esc_html_e( 'File URL', 'all-in-one-video-gallery' ); ?></strong></p>
26
<div class="aiovg-input-wrap">
40
</div>
41
</td>
42
<td>
43
+ <div class="hide-if-no-js">
44
<a class="aiovg-upload-track" href="javascript:;"><?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?></a>
45
<span class="aiovg-pipe-separator">|</span>
46
<a class="aiovg-delete-track" href="javascript:;"><?php esc_html_e( 'Delete', 'all-in-one-video-gallery' ); ?></a>
47
+ </div>
48
</td>
49
</tr>
50
<?php endforeach; ?>
56
57
<table id="aiovg-tracks-clone" style="display: none;">
58
<tr class="aiovg-tracks-row">
59
+ <td class="aiovg-handle aiovg-hidden-xs"><span class="dashicons dashicons-move"></span></td>
60
<td>
61
<p class="aiovg-hidden-sm aiovg-hidden-md aiovg-hidden-lg"><strong><?php esc_html_e( 'File URL', 'all-in-one-video-gallery' ); ?></strong></p>
62
<div class="aiovg-input-wrap">
76
</div>
77
</td>
78
<td>
79
+ <div class="hide-if-no-js">
80
<a class="aiovg-upload-track" href="javascript:;"><?php esc_html_e( 'Upload File', 'all-in-one-video-gallery' ); ?></a>
81
<span class="aiovg-pipe-separator">|</span>
82
<a class="aiovg-delete-track" href="javascript:;"><?php esc_html_e( 'Delete', 'all-in-one-video-gallery' ); ?></a>
83
+ </div>
84
</td>
85
</tr>
86
</table>
admin/videos.php CHANGED
@@ -31,7 +31,7 @@ class AIOVG_Admin_Videos {
31
'all-in-one-video-gallery',
32
__( 'All-in-One Video Gallery - Videos', 'all-in-one-video-gallery' ),
33
__( 'All Videos', 'all-in-one-video-gallery' ),
34
- 'edit_others_aiovg_videos',
35
'edit.php?post_type=aiovg_videos'
36
);
37
}
@@ -106,8 +106,7 @@ class AIOVG_Admin_Videos {
106
'taxonomies' => array( ),
107
'hierarchical' => false,
108
'public' => true,
109
- 'show_ui' => ( current_user_can( 'administrator' ) || current_user_can( 'editor' ) ) ? true : false,
110
- 'show_in_menu' => false,
111
'show_in_admin_bar' => true,
112
'show_in_nav_menus' => false,
113
'show_in_rest' => false,
@@ -118,6 +117,14 @@ class AIOVG_Admin_Videos {
118
'capability_type' => 'aiovg_video',
119
'map_meta_cap' => true,
120
);
121
122
if ( ! empty( $permalink_settings['video'] ) ) {
123
$args['rewrite'] = array(
@@ -284,8 +291,13 @@ class AIOVG_Admin_Videos {
284
$youtube = isset( $_POST['youtube'] ) ? esc_url_raw( $_POST['youtube'] ) : '';
285
update_post_meta( $post_id, 'youtube', $youtube );
286
287
- $vimeo = isset( $_POST['vimeo'] ) ? esc_url_raw( $_POST['vimeo'] ) : '';
288
- update_post_meta( $post_id, 'vimeo', $vimeo );
289
290
$dailymotion = isset( $_POST['dailymotion'] ) ? esc_url_raw( $_POST['dailymotion'] ) : '';
291
update_post_meta( $post_id, 'dailymotion', $dailymotion );
@@ -298,14 +310,16 @@ class AIOVG_Admin_Videos {
298
update_post_meta( $post_id, 'embedcode', $embedcode );
299
remove_filter( 'wp_kses_allowed_html', 'aiovg_allow_iframes_filter' );
300
301
- $image = '';
302
if ( ! empty( $_POST['image'] ) ) {
303
- $image = sanitize_text_field( $_POST['image'] );
304
} else {
305
if ( 'youtube' == $type && ! empty( $youtube ) ) {
306
$image = aiovg_get_youtube_image_url( $youtube );
307
} elseif ( 'vimeo' == $type && ! empty( $vimeo ) ) {
308
- $image = aiovg_get_vimeo_image_url( $vimeo );
309
} elseif ( 'dailymotion' == $type && ! empty( $dailymotion ) ) {
310
$image = aiovg_get_dailymotion_image_url( $dailymotion );
311
} elseif ( 'embedcode' == $type && ! empty( $embedcode ) ) {
@@ -313,7 +327,7 @@ class AIOVG_Admin_Videos {
313
}
314
}
315
update_post_meta( $post_id, 'image', $image );
316
- update_post_meta( $post_id, 'image_id', aiovg_get_attachment_id( $image, 'image' ) );
317
318
$duration = isset( $_POST['duration'] ) ? sanitize_text_field( $_POST['duration'] ) : '';
319
update_post_meta( $post_id, 'duration', $duration );
31
'all-in-one-video-gallery',
32
__( 'All-in-One Video Gallery - Videos', 'all-in-one-video-gallery' ),
33
__( 'All Videos', 'all-in-one-video-gallery' ),
34
+ 'manage_aiovg_options',
35
'edit.php?post_type=aiovg_videos'
36
);
37
}
106
'taxonomies' => array( ),
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,
117
'capability_type' => 'aiovg_video',
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';
127
+ }
128
129
if ( ! empty( $permalink_settings['video'] ) ) {
130
$args['rewrite'] = array(
291
$youtube = isset( $_POST['youtube'] ) ? esc_url_raw( $_POST['youtube'] ) : '';
292
update_post_meta( $post_id, 'youtube', $youtube );
293
294
+ $vimeo = array();
295
+ if ( isset( $_POST['vimeo'] ) ) {
296
+ $vimeo = aiovg_get_vimeo_oembed_data( esc_url_raw( $_POST['vimeo'] ) );
297
+ update_post_meta( $post_id, 'vimeo', $vimeo['video_url'] );
298
+ } else {
299
+ update_post_meta( $post_id, 'vimeo', '' );
300
+ }
301
302
$dailymotion = isset( $_POST['dailymotion'] ) ? esc_url_raw( $_POST['dailymotion'] ) : '';
303
update_post_meta( $post_id, 'dailymotion', $dailymotion );
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 ) ) {
320
$image = aiovg_get_youtube_image_url( $youtube );
321
} elseif ( 'vimeo' == $type && ! empty( $vimeo ) ) {
322
+ $image = $vimeo['thumbnail_url'];
323
} elseif ( 'dailymotion' == $type && ! empty( $dailymotion ) ) {
324
$image = aiovg_get_dailymotion_image_url( $dailymotion );
325
} elseif ( 'embedcode' == $type && ! empty( $embedcode ) ) {
327
}
328
}
329
update_post_meta( $post_id, 'image', $image );
330
+ update_post_meta( $post_id, 'image_id', $image_id );
331
332
$duration = isset( $_POST['duration'] ) ? sanitize_text_field( $_POST['duration'] ) : '';
333
update_post_meta( $post_id, 'duration', $duration );
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: 1.6.5
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', '1.6.5' );
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: 1.6.6
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', '1.6.6' );
80
}
81
// The unique identifier of the plugin
82
if ( !defined( 'AIOVG_PLUGIN_SLUG' ) ) {
blocks/blocks.php CHANGED
@@ -401,10 +401,11 @@ class AIOVG_Blocks {
401
$atts['poster'] = aiovg_get_youtube_image_url( $atts['youtube'] );
402
}
403
} elseif ( false !== strpos( $atts['src'], 'vimeo.com' ) ) {
404
- $atts['vimeo'] = $atts['src'];
405
406
if ( empty( $atts['poster'] ) ) {
407
- $atts['poster'] = aiovg_get_vimeo_image_url( $atts['vimeo'] );
408
}
409
} elseif ( false !== strpos( $atts['src'], 'dailymotion.com' ) ) {
410
$atts['dailymotion'] = $atts['src'];
@@ -417,8 +418,12 @@ class AIOVG_Blocks {
417
} else {
418
$filetype = wp_check_filetype( $atts['src'] );
419
420
- if ( in_array( $filetype['ext'], array( 'mp4', 'webm', 'ogv' ) ) ) {
421
- $atts[ $filetype['ext'] ] = $atts['src'];
422
} elseif ( 'm3u8' == $filetype['ext'] ) {
423
$atts['hls'] = $atts['src'];
424
} elseif ( 'mpd' == $filetype['ext'] ) {
401
$atts['poster'] = aiovg_get_youtube_image_url( $atts['youtube'] );
402
}
403
} elseif ( false !== strpos( $atts['src'], 'vimeo.com' ) ) {
404
+ $vimeo = aiovg_get_vimeo_oembed_data( $atts['src'] );
405
+ $atts['vimeo'] = $vimeo['video_url'];
406
407
if ( empty( $atts['poster'] ) ) {
408
+ $atts['poster'] = $vimeo['thumbnail_url'];
409
}
410
} elseif ( false !== strpos( $atts['src'], 'dailymotion.com' ) ) {
411
$atts['dailymotion'] = $atts['src'];
418
} else {
419
$filetype = wp_check_filetype( $atts['src'] );
420
421
+ if ( in_array( $filetype['ext'], array( 'mp4', 'm4v', 'mov' ) ) ) {
422
+ $atts['mp4'] = $atts['src'];
423
+ } elseif ( 'webm' == $filetype['ext'] ) {
424
+ $atts['webm'] = $atts['src'];
425
+ } elseif ( 'ogv' == $filetype['ext'] ) {
426
+ $atts['ogv'] = $atts['src'];
427
} elseif ( 'm3u8' == $filetype['ext'] ) {
428
$atts['hls'] = $atts['src'];
429
} elseif ( 'mpd' == $filetype['ext'] ) {
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-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 .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}
freemius/assets/css/admin/plugins.css ADDED
@@ -0,0 +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}.wp-list-table.plugins .plugin-title span.fs-tag{display:inline-block;margin-left:5px;line-height:10px}
freemius/assets/css/customizer.css CHANGED
@@ -1 +1 @@
1
- #fs_customizer_upsell .fs-customizer-plan{padding:10px 20px 20px 20px;border-radius:3px;background:#fff}#fs_customizer_upsell .fs-customizer-plan h2{position:relative;margin:0;line-height:2em;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;vertical-align:bottom;margin-left:-7px;margin-right:10px}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{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:#000;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_customizer_upsell .dashicons-editor-help .fs-feature-desc{text-align:right}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#000 transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{right:21px;left:auto}#fs_customizer_upsell .dashicons-editor-help:hover .fs-feature-desc{visibility:visible;opacity:1}#fs_customizer_upsell .button-primary{display:block;text-align:center;margin-top:10px}#fs_customizer_support{display:block !important}#fs_customizer_support .button{float:right}#fs_customizer_support .button-group{width:100%;display:block;margin-top:10px}#fs_customizer_support .button-group .button{float:none;width:50%;text-align:center}
1
+ #fs_customizer_upsell .fs-customizer-plan{padding:10px 20px 20px 20px;border-radius:3px;background:#fff}#fs_customizer_upsell .fs-customizer-plan h2{position:relative;margin:0;line-height:2em;text-transform:uppercase}#fs_customizer_upsell .fs-customizer-plan h2 .button-link{top:-2px}#fs_customizer_upsell .fs-feature{position:relative}#fs_customizer_upsell .dashicons-yes{color:#0085ba;font-size:2em;vertical-align:bottom;margin-left:-7px;margin-right:10px}.rtl #fs_customizer_upsell .dashicons-yes{margin-left:10px;margin-right:-7px}#fs_customizer_upsell .dashicons-editor-help{color:#bbb;cursor:help}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc{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:#000;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_customizer_upsell .dashicons-editor-help .fs-feature-desc{text-align:right}#fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{content:' ';display:block;width:0;height:0;border-style:solid;border-width:5px 5px 0 5px;border-color:#000 transparent transparent transparent;position:absolute;top:100%;left:21px}.rtl #fs_customizer_upsell .dashicons-editor-help .fs-feature-desc::after{right:21px;left:auto}#fs_customizer_upsell .dashicons-editor-help:hover .fs-feature-desc{visibility:visible;opacity:1}#fs_customizer_upsell .button-primary{display:block;text-align:center;margin-top:10px}#fs_customizer_support{display:block !important}#fs_customizer_support .button{float:right}#fs_customizer_support .button-group{width:100%;display:block;margin-top:10px}#fs_customizer_support .button-group .button{float:none;width:50%;text-align:center}#customize-theme-controls #accordion-section-freemius_upsell{border-top:1px solid #0085ba !important;border-bottom:1px solid #0085ba !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title{color:#fff;background-color:#0085ba;border-left:4px solid #0085ba;transition:.15s background-color ease-in-out, .15s border-color ease-in-out;outline:none;border-bottom:none !important}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:hover{background-color:#008ec2;border-left-color:#0073aa}#customize-theme-controls #accordion-section-freemius_upsell h3.accordion-section-title:after{color:#fff}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title{border-left:none;border-right:4px solid #0085ba}#customize-theme-controls #accordion-section-freemius_upsell .rtl h3.accordion-section-title:hover{border-right-color:#0073aa}
freemius/assets/img/all-in-one-video-gallery.png DELETED
Binary file
freemius/includes/class-freemius.php CHANGED
@@ -164,6 +164,15 @@
164
*/
165
private $_has_addons;
166
167
/**
168
* @since 1.1.6
169
* @var string[]bool.
@@ -334,6 +343,14 @@
334
*/
335
private $_dynamically_added_top_level_page_hook_name = '';
336
337
#region Uninstall Reasons IDs
338
339
const REASON_NO_LONGER_NEEDED = 1;
@@ -484,13 +501,13 @@
484
);
485
486
if ( 'true' === fs_request_get( 'fs_clear_api_cache' ) ||
487
- 'true' === fs_request_is_action( 'restart_freemius' )
488
) {
489
FS_Api::clear_cache();
490
$this->_cache->clear();
491
}
492
493
- $this->_register_hooks();
494
495
/**
496
* Starting from version 2.0.0, `FS_Site` entities no longer have the `plan` property and have `plan_id`
@@ -702,6 +719,52 @@
702
$this->_menu->has_menu();
703
}
704
705
/**
706
* Check if the context module is free wp.org theme.
707
*
@@ -734,12 +797,11 @@
734
* @since 1.2.2.7 Even if the menu item was specified to be hidden, when it is the context page, then show the submenu item so the user will have the right context page.
735
*
736
* @param string $slug
737
- * @param bool $ignore_free_wp_org_theme_context This is used to decide if the associated tab should be shown
738
- * or hidden.
739
*
740
* @return bool
741
*/
742
- function is_submenu_item_visible( $slug, $ignore_free_wp_org_theme_context = false ) {
743
if ( $this->is_admin_page( $slug ) ) {
744
/**
745
* It is the current context page, so show the submenu item
@@ -754,7 +816,7 @@
754
return false;
755
}
756
757
- if ( ! $ignore_free_wp_org_theme_context && $this->is_free_wp_org_theme() ) {
758
/**
759
* wp.org themes are limited to a single submenu item, and
760
* sub-submenu items are most likely not allowed (never verified).
@@ -980,7 +1042,7 @@
980
}
981
982
if ( isset( $this->_storage->subscription ) && is_object( $this->_storage->subscription ) ) {
983
- $this->_storage->subscriptions = array( $this->_storage->subscription );
984
}
985
}
986
@@ -1453,11 +1515,11 @@
1453
* @author Vova Feldman (@svovaf)
1454
* @since 1.0.9
1455
*/
1456
- private function _register_hooks() {
1457
$this->_logger->entrance();
1458
1459
if ( is_admin() ) {
1460
- add_action( 'plugins_loaded', array( &$this, '_hook_action_links_and_register_account_hooks' ) );
1461
1462
if ( $this->is_plugin() ) {
1463
if ( self::is_plugin_install_page() && true !== fs_request_get_bool( 'fs_allow_updater_and_dialog' ) ) {
@@ -1498,34 +1560,6 @@
1498
} else {
1499
add_action( 'after_switch_theme', array( &$this, '_activate_theme_event_hook' ), 10, 2 );
1500
1501
- /**
1502
- * Include the required hooks to capture the theme settings' page tabs
1503
- * and cache them.
1504
- *
1505
- * @author Vova Feldman (@svovaf)
1506
- * @since 1.2.2.7
1507
- */
1508
- if ( ! $this->_cache->has_valid( 'tabs' ) ) {
1509
- add_action( 'admin_footer', array( &$this, '_tabs_capture' ) );
1510
- // Add license activation AJAX callback.
1511
- $this->add_ajax_action( 'store_tabs', array( &$this, '_store_tabs_ajax_action' ) );
1512
-
1513
- add_action( 'admin_enqueue_scripts', array( &$this, '_store_tabs_styles' ), 9999999 );
1514
- }
1515
-
1516
- add_action(
1517
- 'admin_footer',
1518
- array( &$this, '_add_freemius_tabs' ),
1519
- /**
1520
- * The tabs JS code must be executed after the tabs capture logic (_tabs_capture()).
1521
- * That's why the priority is 11 while the tabs capture logic is added
1522
- * with priority 10.
1523
- *
1524
- * @author Vova Feldman (@svovaf)
1525
- */
1526
- 11
1527
- );
1528
-
1529
add_action( 'admin_footer', array( &$this, '_style_premium_theme' ) );
1530
}
1531
@@ -1545,7 +1579,10 @@
1545
*
1546
* @author Vova Feldman (@svovaf)
1547
*/
1548
- if ( $this->is_plugin() && $this->is_activation_mode( false ) ) {
1549
add_action( 'plugins_loaded', array( &$this, '_plugins_loaded' ) );
1550
} else {
1551
// If was activated before, then it was already loaded before.
@@ -1605,6 +1642,7 @@
1605
1606
$this->add_ajax_action( 'update_billing', array( &$this, '_update_billing_ajax_action' ) );
1607
$this->add_ajax_action( 'start_trial', array( &$this, '_start_trial_ajax_action' ) );
1608
1609
if ( $this->_is_network_active && fs_is_network_admin() ) {
1610
$this->add_ajax_action( 'network_activate', array( &$this, '_network_activate_ajax_action' ) );
@@ -1646,6 +1684,65 @@
1646
}
1647
}
1648
1649
/**
1650
* Makes Freemius-related updates unavailable on the "Add Plugins" admin page (/plugin-install.php) so that
1651
* they won't interfere with the .org plugins' functionalities on that page (e.g. updating of a .org plugin).
@@ -1908,7 +2005,7 @@
1908
* @since 2.0.0
1909
*/
1910
function _hook_action_links_and_register_account_hooks() {
1911
- add_action( 'admin_init', array( &$this, '_add_tracking_links' ) );
1912
1913
if ( self::is_plugins_page() && $this->is_plugin() ) {
1914
$this->hook_plugin_action_links();
@@ -2250,6 +2347,10 @@
2250
2251
if ( ! isset( $caller_map[ $caller_file_hash ] ) ) {
2252
foreach ( $all_plugins_paths as $plugin_path ) {
2253
if ( false !== strpos( $caller_file_path, fs_normalize_path( dirname( $plugin_path ) . '/' ) ) ) {
2254
$caller_map[ $caller_file_hash ] = fs_normalize_path( $plugin_path );
2255
break;
@@ -2928,7 +3029,7 @@
2928
* @return bool
2929
*/
2930
function is_activation_page() {
2931
- if ( $this->_menu->is_main_settings_page() ) {
2932
return true;
2933
}
2934
@@ -4630,22 +4731,7 @@
4630
4631
$this->parse_settings( $plugin_info );
4632
4633
- if ( is_admin() && $this->is_theme() && $this->is_premium() && ! $this->has_active_valid_license() ) {
4634
- $this->add_ajax_action(
4635
- 'delete_theme_update_data',
4636
- array( &$this, '_delete_theme_update_data_action' )
4637
- );
4638
- }
4639
-
4640
- if ( ! self::is_ajax() ) {
4641
- if ( ! $this->is_addon() || $this->is_only_premium() ) {
4642
- add_action(
4643
- ( $this->_is_network_active && fs_is_network_admin() ? 'network_' : '' ) . 'admin_menu',
4644
- array( &$this, '_prepare_admin_menu' ),
4645
- WP_FS__LOWEST_PRIORITY
4646
- );
4647
- }
4648
- }
4649
4650
if ( $this->should_stop_execution() ) {
4651
return;
@@ -4803,6 +4889,7 @@
4803
if (
4804
$this->_parent->is_registered() &&
4805
! $this->is_registered() &&
4806
/**
4807
* If not registered for add-on and the following conditions for the add-on are met, activate add-on account.
4808
* * Network active and in network admin - network activate add-on account.
@@ -5396,6 +5483,7 @@
5396
'is_live' => $this->get_bool_option( $plugin_info, 'is_live', true ),
5397
'affiliate_moderation' => $this->get_option( $plugin_info, 'has_affiliation' ),
5398
'bundle_id' => $this->get_option( $plugin_info, 'bundle_id', null ),
5399
) );
5400
5401
if ( $plugin->is_updated() ) {
@@ -5467,6 +5555,14 @@
5467
5468
$this->_is_trial_require_payment = $this->get_bool_option( $plugin_info['trial'], 'is_require_payment', false );
5469
}
5470
}
5471
5472
/**
@@ -6937,8 +7033,7 @@
6937
6938
$this->_add_upgrade_action_link();
6939
6940
- if ( ! $this->is_addon() &&
6941
- ! ( ! $this->_is_network_active && fs_is_network_admin() ) &&
6942
(
6943
( true === $this->_storage->require_license_activation ) ||
6944
// Not registered nor anonymous.
@@ -6948,7 +7043,7 @@
6948
)
6949
) {
6950
if ( ! $this->is_pending_activation() ) {
6951
- if ( ! $this->_menu->is_main_settings_page() ) {
6952
/**
6953
* If a user visits any other admin page before activating the premium-only theme with a valid
6954
* license, reactivate the previous theme.
@@ -7015,8 +7110,8 @@
7015
}
7016
}
7017
7018
- if ( $this->is_theme() &&
7019
- $this->_menu->is_main_settings_page()
7020
) {
7021
$this->_show_theme_activation_optin_dialog();
7022
}
@@ -7781,7 +7876,7 @@
7781
*
7782
* @return array
7783
*/
7784
- private function get_sites_for_network_level_optin() {
7785
$sites = array();
7786
$all_sites = self::get_sites();
7787
@@ -9397,10 +9492,12 @@
9397
* @author Vova Feldman (@svovaf)
9398
* @since 1.0.1
9399
*
9400
* @return array
9401
*/
9402
- function get_plugin_data() {
9403
- if ( ! isset( $this->_plugin_data ) ) {
9404
self::require_plugin_essentials();
9405
9406
if ( $this->is_plugin() ) {
@@ -9505,6 +9602,18 @@
9505
null;
9506
}
9507
9508
/**
9509
* @author Vova Feldman (@svovaf)
9510
* @since 1.2.1.5
@@ -9527,6 +9636,32 @@
9527
$this->_plugin->id;
9528
}
9529
9530
/**
9531
* @author Vova Feldman (@svovaf)
9532
* @since 1.0.1
@@ -9626,12 +9761,14 @@
9626
* @author Vova Feldman (@svovaf)
9627
* @since 1.0.0
9628
*
9629
* @return string
9630
*/
9631
- function get_plugin_version() {
9632
$this->_logger->entrance();
9633
9634
- $plugin_data = $this->get_plugin_data();
9635
9636
$this->_logger->departure( 'Version = ' . $plugin_data['Version'] );
9637
@@ -9756,7 +9893,7 @@
9756
* @return array[number]FS_User
9757
*/
9758
static function get_all_users() {
9759
- $users = self::$_accounts->get_option( 'users', array() );
9760
9761
if ( ! is_array( $users ) ) {
9762
$users = array();
@@ -9800,7 +9937,7 @@
9800
$option_name = $module_type . '_' . $option_name;
9801
}
9802
9803
- return self::$_accounts->get_option( $option_name, array(), $network_level_or_blog_id );
9804
}
9805
9806
/**
@@ -9848,6 +9985,54 @@
9848
self::$_accounts->set_option( $option_name, $option_value, $store, $network_level_or_blog_id );
9849
}
9850
9851
/**
9852
* @author Vova Feldman (@svovaf)
9853
* @since 1.0.6
@@ -10031,7 +10216,7 @@
10031
* @return FS_Plugin_Tag[]
10032
*/
10033
private static function get_all_updates() {
10034
- $updates = self::$_accounts->get_option( 'updates', array() );
10035
10036
if ( ! is_array( $updates ) ) {
10037
$updates = array();
@@ -10047,7 +10232,7 @@
10047
* @return array<number,FS_Plugin[]>|false
10048
*/
10049
private static function get_all_addons() {
10050
- $addons = self::$_accounts->get_option( 'addons', array() );
10051
10052
if ( ! is_array( $addons ) ) {
10053
$addons = array();
@@ -10060,7 +10245,7 @@
10060
* @author Vova Feldman (@svovaf)
10061
* @since 1.0.6
10062
*
10063
- * @return FS_Plugin[]|false
10064
*/
10065
private static function get_all_account_addons() {
10066
$addons = self::$_accounts->get_option( 'account_addons', array() );
@@ -10161,7 +10346,7 @@
10161
* @author Vova Feldman (@svovaf)
10162
* @since 1.0.6
10163
*
10164
- * @return FS_Plugin[]|false
10165
*/
10166
function get_account_addons() {
10167
$this->_logger->entrance();
@@ -10305,7 +10490,7 @@
10305
10306
if ( ! fs_is_network_admin() ) {
10307
// Get blog-level activated installations.
10308
- $sites = self::$_accounts->get_option( 'sites', array() );
10309
} else {
10310
$sites = null;
10311
@@ -10314,7 +10499,7 @@
10314
) {
10315
if ( FS_Site::is_valid_id( $addon_storage->network_install_blog_id ) ) {
10316
// Get network-level activated installations.
10317
- $sites = self::$_accounts->get_option(
10318
'sites',
10319
array(),
10320
$addon_storage->network_install_blog_id
@@ -10324,9 +10509,10 @@
10324
}
10325
10326
$addon_info = array(
10327
- 'is_connected' => false,
10328
- 'slug' => $slug,
10329
- 'title' => $addon->title
10330
);
10331
10332
if ( ! $is_installed ) {
@@ -10372,14 +10558,14 @@
10372
10373
$addon_info['site'] = $site;
10374
10375
- $plugins_data = self::$_accounts->get_option( WP_FS__MODULE_TYPE_PLUGIN . 's', array() );
10376
if ( isset( $plugins_data[ $slug ] ) ) {
10377
$plugin_data = $plugins_data[ $slug ];
10378
10379
$addon_info['version'] = $plugin_data->version;
10380
}
10381
10382
- $all_plans = self::$_accounts->get_option( 'plans', array() );
10383
if ( isset( $all_plans[ $slug ] ) ) {
10384
$plans = $all_plans[ $slug ];
10385
@@ -10392,7 +10578,7 @@
10392
}
10393
}
10394
10395
- $licenses = self::$_accounts->get_option( 'all_licenses', array() );
10396
if ( is_array( $licenses ) && isset( $licenses[ $addon_id ] ) ) {
10397
foreach ( $licenses[ $addon_id ] as $license ) {
10398
if ( $license->id == $site->license_id ) {
@@ -10406,7 +10592,9 @@
10406
if ( isset( $addon_storage->subscriptions ) &&
10407
! empty( $addon_storage->subscriptions )
10408
) {
10409
- foreach ( $addon_storage->subscriptions as $subscription ) {
10410
if ( $subscription->license_id == $site->license_id ) {
10411
$addon_info['subscription'] = $subscription;
10412
break;
@@ -10497,7 +10685,7 @@
10497
function is_premium() {
10498
/**
10499
* `$this->_plugin` will be `false` when `is_activation_mode` calls this method directly from the
10500
- * `_register_hooks` method.
10501
*
10502
* @author Leo Fajardo (@leorw)
10503
* @since 2.2.3
@@ -10594,7 +10782,20 @@
10594
return false;
10595
}
10596
10597
- return $this->has_active_valid_license() && ( $this->_site->trial_plan_id == $this->_license->plan_id );
10598
}
10599
10600
/**
@@ -10729,10 +10930,26 @@
10729
* @author Vova Feldman (@svovaf)
10730
* @since 1.1.7.3
10731
*
10732
* @return bool
10733
*/
10734
- function has_any_license() {
10735
- return is_array( $this->_licenses ) && ( 0 < count( $this->_licenses ) );
10736
}
10737
10738
/**
@@ -10878,7 +11095,9 @@
10878
10879
if ( $license instanceof FS_Plugin_License ) {
10880
$this->_licenses[] = $license;
10881
- $this->_license = $license;
10882
$this->_store_licenses();
10883
10884
return $license;
@@ -11103,7 +11322,7 @@
11103
11104
// Update current license.
11105
if ( is_object( $this->_license ) ) {
11106
- $this->_license = $this->_get_license_by_id( $this->_license->id );
11107
}
11108
11109
return $this->_licenses;
@@ -11443,6 +11662,21 @@
11443
return true;
11444
}
11445
11446
/**
11447
* Activate a given license on a collection of blogs/sites that are not yet opted-in.
11448
*
@@ -11458,7 +11692,7 @@
11458
private function activate_license_on_many_sites(
11459
FS_User $user,
11460
$license_key,
11461
- array $site_ids
11462
) {
11463
$sites = array();
11464
foreach ( $site_ids as $site_id ) {
@@ -11482,30 +11716,43 @@
11482
}
11483
11484
$installs = array();
11485
- foreach ( $result->installs as $install ) {
11486
- $installs[] = new FS_Site( $install );
11487
- }
11488
11489
- // Map site addresses to their blog IDs.
11490
- $address_to_blog_map = $this->get_address_to_blog_map();
11491
11492
- $first_blog_id = null;
11493
11494
- foreach ( $installs as $install ) {
11495
- $address = trailingslashit( fs_strip_url_protocol( $install->url ) );
11496
- $blog_id = $address_to_blog_map[ $address ];
11497
11498
- $this->_store_site( true, $blog_id, $install );
11499
11500
- $this->reset_anonymous_mode( $blog_id );
11501
11502
- if ( is_null( $first_blog_id ) ) {
11503
- $first_blog_id = $blog_id;
11504
}
11505
- }
11506
11507
- if ( ! FS_Site::is_valid_id( $this->_storage->network_install_blog_id ) ) {
11508
- $this->_storage->network_install_blog_id = $first_blog_id;
11509
}
11510
11511
return true;
@@ -11524,7 +11771,7 @@
11524
function _update_site_license( $new_license ) {
11525
$this->_logger->entrance();
11526
11527
- $this->_license = $new_license;
11528
11529
if ( ! is_object( $new_license ) ) {
11530
$this->_site->license_id = null;
@@ -11560,21 +11807,256 @@
11560
}
11561
11562
/**
11563
- * Sync site's subscription.
11564
- *
11565
* @author Vova Feldman (@svovaf)
11566
- * @since 1.0.9
11567
*
11568
- * @param FS_Plugin_License|null $license
11569
*
11570
- * @return bool|\FS_Subscription
11571
*/
11572
- private function _sync_site_subscription( $license ) {
11573
- if ( ! is_object( $license ) ) {
11574
- $this->delete_unused_subscriptions();
11575
11576
- return false;
11577
- }
11578
11579
// Load subscription details if not lifetime.
11580
$subscription = $license->is_lifetime() ?
@@ -11616,7 +12098,7 @@
11616
return null;
11617
}
11618
11619
- foreach ( $this->_storage->subscriptions as $subscription ) {
11620
if ( $subscription->license_id == $license_id ) {
11621
return $subscription;
11622
}
@@ -11642,7 +12124,7 @@
11642
return;
11643
}
11644
11645
- $subscriptions = $this->_storage->subscriptions;
11646
11647
$updated_subscription = false;
11648
foreach ( $subscriptions as $key => $existing_subscription ) {
@@ -11755,9 +12237,11 @@
11755
* @author Vova Feldman (@svovaf)
11756
* @since 1.2.1.7
11757
*
11758
* @return bool
11759
*/
11760
- function is_single_plan() {
11761
$this->_logger->entrance();
11762
11763
if ( ! $this->is_registered() ||
@@ -11767,7 +12251,18 @@
11767
return true;
11768
}
11769
11770
- return ( 1 === ( count( $this->_plans ) - ( $this->has_free_plan() ? 1 : 0 ) ) );
11771
}
11772
11773
/**
@@ -11881,6 +12376,18 @@
11881
fs_require_template( 'forms/resend-key.php', $vars );
11882
}
11883
11884
/**
11885
* Displays a subscription cancellation dialog box when the user clicks on the "Deactivate License"
11886
* link on the "Account" page or deactivates a plugin and there's an active subscription that is
@@ -11899,6 +12406,10 @@
11899
// Subscription cancellation dialog box is currently not supported for multisite networks.
11900
return array();
11901
}
11902
11903
$license = $this->_get_license();
11904
@@ -11986,8 +12497,8 @@
11986
return;
11987
}
11988
11989
- if ( ! $this->is_premium() ) {
11990
- // Only add license activation logic to the premium version.
11991
return;
11992
}
11993
@@ -12149,7 +12660,9 @@
12149
$is_marketing_allowed = null,
12150
$plugin_id = null
12151
) {
12152
- return $this->activate_license(
12153
$license_key,
12154
$this->is_network_active() ?
12155
$this->get_sites_for_network_level_optin() :
@@ -12158,6 +12671,11 @@
12158
null,
12159
$plugin_id
12160
);
12161
}
12162
12163
/**
@@ -12203,7 +12721,20 @@
12203
12204
$has_valid_blog_id = is_numeric( $blog_id );
12205
12206
- if ( $fs->is_registered() ) {
12207
if ( fs_is_network_admin() && ! $has_valid_blog_id ) {
12208
// If no specific blog ID was provided, activate the license for all sites in the network.
12209
$blog_2_install_map = array();
@@ -12214,7 +12745,7 @@
12214
continue;
12215
}
12216
12217
- $install = $this->get_install_by_blog_id( $site['blog_id'] );
12218
12219
if ( is_object( $install ) ) {
12220
$blog_2_install_map[ $site['blog_id'] ] = $install;
@@ -12223,10 +12754,8 @@
12223
}
12224
}
12225
12226
- $user = $this->get_current_or_network_user();
12227
-
12228
if ( ! empty( $blog_2_install_map ) ) {
12229
- $result = $this->activate_license_on_many_installs( $user, $license_key, $blog_2_install_map );
12230
12231
if ( true !== $result ) {
12232
$error = FS_Api::is_api_error_object( $result ) ?
@@ -12236,7 +12765,7 @@
12236
}
12237
12238
if ( empty( $error ) && ! empty( $site_ids ) ) {
12239
- $result = $this->activate_license_on_many_sites( $user, $license_key, $site_ids );
12240
12241
if ( true !== $result ) {
12242
$error = FS_Api::is_api_error_object( $result ) ?
@@ -12252,28 +12781,38 @@
12252
*
12253
* @author Leo Fajardo (@leorw)
12254
*/
12255
- $this->switch_to_blog( $blog_id );
12256
}
12257
12258
- $api = $fs->get_api_site_scope();
12259
12260
- $params = array(
12261
- 'license_key' => $fs->apply_filters( 'license_key', $license_key )
12262
- );
12263
12264
- $install = $api->call( $fs->add_show_pending( '/' ), 'put', $params );
12265
12266
- if ( FS_Api::is_api_error( $install ) ) {
12267
- $error = FS_Api::is_api_error_object( $install ) ?
12268
- $install->error->message :
12269
- var_export( $install->error, true );
12270
- } else {
12271
- $fs->reconnect_locally( $has_valid_blog_id );
12272
}
12273
}
12274
12275
if ( empty( $error ) ) {
12276
- $this->network_upgrade_mode_completed();
12277
12278
$fs->_sync_license( true, $has_valid_blog_id );
12279
@@ -12325,17 +12864,17 @@
12325
continue;
12326
}
12327
12328
- if ( $this->is_installed_on_site( $blog_id ) ) {
12329
// Site was already connected before.
12330
continue;
12331
}
12332
12333
- if ( $this->is_site_delegated_connection( $blog_id ) ) {
12334
// Site's connection was delegated.
12335
continue;
12336
}
12337
12338
- if ( $this->is_anonymous_site( $blog_id ) ) {
12339
// Site connection was already skipped.
12340
continue;
12341
}
@@ -12344,18 +12883,18 @@
12344
}
12345
12346
if ( ! empty( $pending_sites ) ) {
12347
- if ( $this->is_freemium() && $this->is_enable_anonymous() ) {
12348
- $this->skip_connection( $pending_sites );
12349
} else {
12350
- $this->delegate_connection( $pending_sites );
12351
}
12352
}
12353
}
12354
}
12355
}
12356
12357
- if ( false === $error && true === $this->_storage->require_license_activation ) {
12358
- $this->_storage->require_license_activation = false;
12359
}
12360
12361
$result = array(
@@ -12363,9 +12902,9 @@
12363
);
12364
12365
if ( false !== $error ) {
12366
- $result['error'] = $this->apply_filters( 'opt_in_error_message', $error );
12367
} else {
12368
- if ( $this->is_addon() || $this->has_addons() ) {
12369
/**
12370
* Purge the valid user licenses cache so that when the "Account" or the "Add-Ons" page is loaded,
12371
* an updated valid user licenses collection will be fetched from the server which is used to also
@@ -12374,7 +12913,7 @@
12374
* @author Leo Fajardo (@leorw)
12375
* @since 2.2.4
12376
*/
12377
- $this->purge_valid_user_licenses_cache();
12378
}
12379
12380
$result['next_page'] = $next_page;
@@ -13409,9 +13948,8 @@
13409
$page_param = $this->_menu->get_slug( $page );
13410
13411
if ( empty( $page ) &&
13412
- $this->is_theme() &&
13413
// Show the opt-in as an overlay for free wp.org themes or themes without any settings page.
13414
- ( $this->is_free_wp_org_theme() || ! $this->has_settings_menu() )
13415
) {
13416
$params[ $this->get_unique_affix() . '_show_optin' ] = 'true';
13417
@@ -13841,10 +14379,12 @@
13841
*
13842
* @param int $blog_id
13843
* @param FS_Site $install
13844
*/
13845
function switch_to_blog( $blog_id, FS_Site $install = null ) {
13846
if ( $blog_id == $this->_context_is_network_or_blog_id ) {
13847
- return;
13848
}
13849
13850
switch_to_blog( $blog_id );
@@ -13858,9 +14398,10 @@
13858
$install :
13859
$this->get_install_by_blog_id( $blog_id );
13860
13861
- $this->_user = false;
13862
- $this->_licenses = false;
13863
- $this->_license = null;
13864
13865
if ( is_object( $this->_site ) ) {
13866
// Try to fetch user from install.
@@ -13905,6 +14446,8 @@
13905
13906
unset( $this->_site_api );
13907
unset( $this->_user_api );
13908
}
13909
13910
/**
@@ -14350,6 +14893,18 @@
14350
return ( $this->_menu->get_slug( $page ) === fs_request_get( 'page', '', 'get' ) );
14351
}
14352
14353
/**
14354
* Get module's main admin setting page URL.
14355
*
@@ -14370,8 +14925,22 @@
14370
* @since 1.2.2.7
14371
*
14372
* @return bool
14373
*/
14374
function is_theme_settings_page() {
14375
return fs_starts_with(
14376
fs_request_get( 'page', '', 'get' ),
14377
$this->_menu->get_slug()
@@ -14993,6 +15562,13 @@
14993
'is_uninstalled' => false,
14994
) );
14995
14996
if ( true === $network_level_or_blog_id ) {
14997
if ( ! isset( $override_with['sites'] ) ) {
14998
$params['sites'] = $this->get_sites_for_network_level_optin();
@@ -15088,9 +15664,12 @@
15088
if ( ! $is_uninstall ) {
15089
$fs_user = Freemius::_get_user_by_email( $email );
15090
if ( is_object( $fs_user ) && ! $this->is_pending_activation() ) {
15091
- return $this->install_with_current_user(
15092
false,
15093
$trial_plan_id,
15094
$sites
15095
);
15096
}
@@ -15361,7 +15940,7 @@
15361
);
15362
15363
if ( is_numeric( $first_install->license_id ) ) {
15364
- $this->_license = $this->_get_license_by_id( $first_install->license_id );
15365
}
15366
15367
$this->_admin_notices->remove_sticky( 'connect_account' );
@@ -15852,7 +16431,7 @@
15852
*
15853
* @return \FS_Site|object|string If redirect is `false`, returns the next page the user should be redirected to, or the API error object if failed to install. If $setup_account is set to `false`, return the newly created install.
15854
*/
15855
- private function install_with_user(
15856
FS_User $user,
15857
$license_key = false,
15858
$trial_plan_id = false,
@@ -15941,6 +16520,10 @@
15941
15942
if ( ! empty( $license_key ) ) {
15943
$extra_install_params['license_key'] = $this->apply_filters( 'license_key', $license_key );
15944
} else if ( FS_Plugin_Plan::is_valid_id( $trial_plan_id ) ) {
15945
$extra_install_params['trial_plan_id'] = $trial_plan_id;
15946
}
@@ -15962,7 +16545,7 @@
15962
! $this->is_api_result_object( $result, 'installs' )
15963
) {
15964
if ( ! empty( $args['license_key'] ) ) {
15965
- // Pass full the fully entered license key to the failure handler.
15966
$args['license_key'] = $license_key;
15967
}
15968
@@ -16339,7 +16922,7 @@
16339
*/
16340
private function add_menu_action() {
16341
if ( $this->is_activation_mode() ) {
16342
- if ( $this->is_plugin() || ( $this->has_settings_menu() && ! $this->is_free_wp_org_theme() ) ) {
16343
$this->override_plugin_menu_with_activation();
16344
} else {
16345
/**
@@ -16361,7 +16944,7 @@
16361
}
16362
} else if (
16363
fs_request_is_action( 'sync_user' ) &&
16364
- ( ! $this->has_settings_menu() || $this->is_free_wp_org_theme() )
16365
) {
16366
$this->_handle_account_user_sync();
16367
}
@@ -16609,7 +17192,7 @@
16609
// Didn't ask to hide the pricing page.
16610
$this->is_page_visible( 'pricing' ) &&
16611
// Don't have a valid active license or has more than one plan.
16612
- ( ! $this->is_paying() || ! $this->is_single_plan() )
16613
);
16614
}
16615
@@ -16627,12 +17210,13 @@
16627
return false;
16628
}
16629
16630
- if ( $this->is_free_wp_org_theme() && ! fs_is_network_admin() ) {
16631
- // Also add action links or submenu items when running in a free .org theme so the tabs will be visible.
16632
- return true;
16633
- }
16634
-
16635
- if ( $is_activation_mode && ! $this->is_free_wp_org_theme() ) {
16636
return false;
16637
}
16638
@@ -16712,17 +17296,19 @@
16712
}
16713
16714
if ( $add_submenu_items ) {
16715
- // Add contact page.
16716
- $this->add_submenu_item(
16717
- $this->get_text_inline( 'Contact Us', 'contact-us' ),
16718
- array( &$this, '_contact_page_render' ),
16719
- $this->get_plugin_name() . ' &ndash; ' . $this->get_text_inline( 'Contact Us', 'contact-us' ),
16720
- 'manage_options',
16721
- 'contact',
16722
- 'Freemius::_clean_admin_content_section',
16723
- WP_FS__DEFAULT_PRIORITY,
16724
- $this->is_submenu_item_visible( 'contact' )
16725
- );
16726
16727
if ( $this->has_addons() ) {
16728
$this->add_submenu_item(
@@ -16741,7 +17327,7 @@
16741
if ( $add_submenu_items ||
16742
( $is_activation_mode && $this->is_only_premium() && $this->is_admin_page( 'pricing' ) )
16743
) {
16744
- if ( ! WP_FS__DEMO_MODE ) {
16745
$show_pricing = (
16746
$this->is_submenu_item_visible( 'pricing' ) &&
16747
$this->is_pricing_page_visible()
@@ -17106,6 +17692,24 @@
17106
17107
#endregion ------------------------------------------------------------------
17108
17109
17110
#--------------------------------------------------------------------------------
17111
#region Actions / Hooks / Filters
@@ -17482,21 +18086,24 @@
17482
private function _store_site( $store = true, $network_level_or_blog_id = null, FS_Site $site = null ) {
17483
$this->_logger->entrance();
17484
17485
- if ( empty( $this->_site->id ) ) {
17486
$this->_logger->error( "Empty install ID, can't store site." );
17487
17488
return;
17489
}
17490
17491
- $site_clone = is_object( $site ) ? $site : $this->_site;
17492
- $encrypted_site = clone $site_clone;
17493
17494
$sites = self::get_all_sites( $this->_module_type, $network_level_or_blog_id );
17495
17496
$prev_stored_user_id = $this->_storage->get( 'prev_user_id', false, $network_level_or_blog_id );
17497
17498
if ( empty( $prev_stored_user_id ) &&
17499
- $this->_user->id != $this->_site->user_id
17500
) {
17501
/**
17502
* Store the current user ID as the previous user ID so that the previous user can be used
@@ -17512,7 +18119,7 @@
17512
$this->_storage->store( 'prev_user_id', $sites[ $this->_slug ]->user_id, $network_level_or_blog_id );
17513
}
17514
17515
- $sites[ $this->_slug ] = $encrypted_site;
17516
17517
$this->set_account_option( 'sites', $sites, $store, $network_level_or_blog_id );
17518
}
@@ -17722,6 +18329,10 @@
17722
* @since 2.2.4
17723
*/
17724
private function purge_valid_user_licenses_cache() {
17725
$this->get_api_user_scope()->purge_cache( $this->get_valid_user_licenses_endpoint() );
17726
}
17727
@@ -18380,6 +18991,88 @@
18380
return self::is_active_valid_license( $this->_license );
18381
}
18382
18383
/**
18384
* Check if a given license is active & valid (not expired).
18385
*
@@ -18694,7 +19387,7 @@
18694
} else {
18695
// Authentication params are broken.
18696
$this->_admin_notices->add(
18697
- $this->get_text_inline( 'It seems like one of the authentication parameters is wrong. Update your Public Key, Secret Key & User ID, and try again.', 'wrong-authentication-param-message' ),
18698
$this->get_text_x_inline( 'Oops', 'exclamation', 'oops' ) . '...',
18699
'error'
18700
);
@@ -18861,12 +19554,32 @@
18861
$this->get_network_install_blog_id()
18862
);
18863
} else {
18864
- if ( is_object( $this->_license ) && $this->_license->is_expired() ) {
18865
- if ( ! $this->has_features_enabled_license() ) {
18866
- $this->_deactivate_license();
18867
- $plan_change = 'downgraded';
18868
- } else {
18869
- $plan_change = 'expired';
18870
}
18871
}
18872
@@ -18890,7 +19603,7 @@
18890
18891
$hmm_text = $this->get_text_x_inline( 'Hmm', 'something somebody says when they are thinking about what you have just said.', 'hmm' ) . '...';
18892
18893
- if ( $this->has_paid_plan() ) {
18894
switch ( $plan_change ) {
18895
case 'none':
18896
if ( ! $background && is_admin() ) {
@@ -18983,6 +19696,9 @@
18983
'license_expired',
18984
$hmm_text
18985
);
18986
$this->_admin_notices->remove_sticky( 'plan_upgraded' );
18987
break;
18988
case 'trial_started':
@@ -19037,7 +19753,8 @@
19037
* @author Vova Feldman (@svovaf)
19038
* @since 1.0.5
19039
*
19040
- * @param bool $background
19041
*/
19042
protected function _activate_license( $background = false, $premium_license = null ) {
19043
$this->_logger->entrance();
@@ -19844,7 +20561,7 @@
19844
19845
$api = $this->get_api_site_or_plugin_scope();
19846
19847
- $path = $this->add_show_pending( '/addons.json?enriched=true' );
19848
19849
/**
19850
* @since 1.2.1
@@ -20151,7 +20868,7 @@
20151
* @return string
20152
*/
20153
function get_after_activation_url( $filter, $params = array(), $network = null ) {
20154
- if ( $this->is_free_wp_org_theme() &&
20155
( fs_request_has( 'pending_activation' ) ||
20156
// For cases when the first time path is set, even though it's a WP.org theme.
20157
fs_request_get_bool( $this->get_unique_affix() . '_show_optin' ) )
@@ -20894,6 +21611,26 @@
20894
return $this->_plugin_api;
20895
}
20896
20897
/**
20898
* Get site API scope object (fallback to public plugin scope when not registered).
20899
*
@@ -21227,7 +21964,7 @@
21227
function _show_theme_activation_optin_dialog() {
21228
fs_enqueue_local_style( 'fs_connect', '/admin/connect.css' );
21229
21230
- add_action( 'admin_footer-themes.php', array( &$this, '_add_fs_theme_activation_dialog' ) );
21231
}
21232
21233
/**
@@ -21235,6 +21972,12 @@
21235
* @since 1.2.2
21236
*/
21237
function _add_fs_theme_activation_dialog() {
21238
$vars = array( 'id' => $this->_module_id );
21239
fs_require_once_template( 'connect.php', $vars );
21240
}
@@ -21322,7 +22065,7 @@
21322
$add_upgrade_link = (
21323
$add_action_links ||
21324
( $is_activation_mode && $this->is_only_premium() )
21325
- ) && ! WP_FS__DEMO_MODE;
21326
21327
$add_addons_link = ( $add_action_links && $this->has_addons() );
21328
@@ -21411,6 +22154,11 @@
21411
21412
$this->_logger->entrance();
21413
21414
if ( fs_is_network_admin() ) {
21415
if ( ! $this->_is_network_active ) {
21416
// Don't add tracking links when browsing the network WP Admin and the plugin is not network active.
@@ -21470,8 +22218,6 @@
21470
} else {
21471
$link_text_id = $this->get_text_inline( 'Opt In', 'opt-in' );
21472
}
21473
-
21474
- add_action( 'admin_footer', array( &$this, '_add_optout_dialog' ) );
21475
} else if ( $this->is_anonymous() || $this->is_activation_mode() ) {
21476
/**
21477
* Show opt-in link only if skipped or in activation mode.
@@ -21488,6 +22234,8 @@
21488
$url = $this->get_activation_url( $params );
21489
}
21490
21491
if ( ! empty( $link_text_id ) && $this->is_plugin() && self::is_plugins_page() ) {
21492
$this->add_plugin_action_link(
21493
$link_text_id,
@@ -22177,7 +22925,7 @@
22177
function _tabs_capture() {
22178
$this->_logger->entrance();
22179
22180
- if ( ! $this->is_theme_settings_page() ||
22181
! $this->is_matching_url( $this->main_menu_url() )
22182
) {
22183
return;
@@ -22232,7 +22980,7 @@
22232
function _store_tabs_styles() {
22233
$this->_logger->entrance();
22234
22235
- if ( ! $this->is_theme_settings_page() ||
22236
! $this->is_matching_url( $this->main_menu_url() )
22237
) {
22238
return;
@@ -22306,18 +23054,23 @@
22306
return false;
22307
}
22308
22309
- if ( ! $this->is_theme() ) {
22310
// Only add tabs to themes for now.
22311
return false;
22312
}
22313
22314
- if ( ! $this->has_paid_plan() && ! $this->has_addons() ) {
22315
// Only add tabs to monetizing themes.
22316
return false;
22317
}
22318
22319
- if ( ! $this->is_theme_settings_page() ) {
22320
- // Only add tabs if browsing one of the theme's setting pages.
22321
return false;
22322
}
22323
@@ -23004,8 +23757,8 @@
23004
}
23005
23006
$modules = array_merge(
23007
- array_values( self::$_accounts->get_option( 'plugins', array() ) ),
23008
- array_values( self::$_accounts->get_option( 'themes', array() ) )
23009
);
23010
23011
foreach ( $modules as $module ) {
@@ -23149,8 +23902,8 @@
23149
}
23150
23151
$modules = array_merge(
23152
- array_values( self::$_accounts->get_option( 'plugins', array() ) ),
23153
- array_values( self::$_accounts->get_option( 'themes', array() ) )
23154
);
23155
23156
foreach ( $modules as $key => $module ) {
164
*/
165
private $_has_addons;
166
167
+ /**
168
+ * @since 2.4.5
169
+ * @var string Navigation type: 'menu' or 'tabs'.
170
+ */
171
+ private $_navigation;
172
+
173
+ const NAVIGATION_MENU = 'menu';
174
+ const NAVIGATION_TABS = 'tabs';
175
+
176
/**
177
* @since 1.1.6
178
* @var string[]bool.
343
*/
344
private $_dynamically_added_top_level_page_hook_name = '';
345
346
+ /**
347
+ * @author Leo Fajardo (@leorw)
348
+ * @since 2.3.1
349
+ *
350
+ * @var bool
351
+ */
352
+ private $is_whitelabeled;
353
+
354
#region Uninstall Reasons IDs
355
356
const REASON_NO_LONGER_NEEDED = 1;
501
);
502
503
if ( 'true' === fs_request_get( 'fs_clear_api_cache' ) ||
504
+ fs_request_is_action( 'restart_freemius' )
505
) {
506
FS_Api::clear_cache();
507
$this->_cache->clear();
508
}
509
510
+ $this->register_constructor_hooks();
511
512
/**
513
* Starting from version 2.0.0, `FS_Site` entities no longer have the `plan` property and have `plan_id`
719
$this->_menu->has_menu();
720
}
721
722
+ /**
723
+ * If `true` the opt-in should be shown as a modal dialog box on the themes.php page. WordPress.org themes guidelines prohibit from redirecting the user from the themes.php page after activating a theme.
724
+ *
725
+ * @author Vova Feldman (@svovaf)
726
+ * @since 2.4.5
727
+ *
728
+ * @return bool
729
+ */
730
+ function show_opt_in_on_themes_page() {
731
+ if ( ! $this->is_free_wp_org_theme() ) {
732
+ return false;
733
+ }
734
+
735
+ if ( ! $this->has_settings_menu() ) {
736
+ return true;
737
+ }
738
+
739
+ return $this->show_settings_with_tabs();
740
+ }
741
+
742
+ /**
743
+ * If `true` the opt-in should be shown on the product's main setting page.
744
+ *
745
+ * @author Vova Feldman (@svovaf)
746
+ * @since 2.4.5
747
+ *
748
+ * @return bool
749
+ *
750
+ * @uses show_opt_in_on_themes_page();
751
+ */
752
+ function show_opt_in_on_setting_page() {
753
+ return ! $this->show_opt_in_on_themes_page();
754
+ }
755
+
756
+ /**
757
+ * If `true` the settings should be shown using tabs.
758
+ *
759
+ * @author Vova Feldman (@svovaf)
760
+ * @since 2.4.5
761
+ *
762
+ * @return bool
763
+ */
764
+ function show_settings_with_tabs() {
765
+ return ( self::NAVIGATION_TABS === $this->_navigation );
766
+ }
767
+
768
/**
769
* Check if the context module is free wp.org theme.
770
*
797
* @since 1.2.2.7 Even if the menu item was specified to be hidden, when it is the context page, then show the submenu item so the user will have the right context page.
798
*
799
* @param string $slug
800
+ * @param bool $is_tabs_visibility_check This is used to decide if the associated tab should be shown or hidden.
801
*
802
* @return bool
803
*/
804
+ function is_submenu_item_visible( $slug, $is_tabs_visibility_check = false ) {
805
if ( $this->is_admin_page( $slug ) ) {
806
/**
807
* It is the current context page, so show the submenu item
816
return false;
817
}
818
819
+ if ( ! $is_tabs_visibility_check && $this->show_settings_with_tabs() ) {
820
/**
821
* wp.org themes are limited to a single submenu item, and
822
* sub-submenu items are most likely not allowed (never verified).
1042
}
1043
1044
if ( isset( $this->_storage->subscription ) && is_object( $this->_storage->subscription ) ) {
1045
+ $this->_storage->subscriptions = array( fs_get_entity( $this->_storage->subscription, FS_Subscription::get_class_name() ) );
1046
}
1047
}
1048
1515
* @author Vova Feldman (@svovaf)
1516
* @since 1.0.9
1517
*/
1518
+ private function register_constructor_hooks() {
1519
$this->_logger->entrance();
1520