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 (50) 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 +293 -283
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
  ) );