Music Player for WooCommerce - Version 1.0.161

Version Description

  • Fixes an issue with the players in the WooCommerce products list (backend).
Download this release

Release Info

Developer codepeople
Plugin Icon 128x128 Music Player for WooCommerce
Version 1.0.161
Comparing to
See all releases

Code changes from version 1.0.141 to 1.0.161

addons/ap-compact-audio-player.addon.php ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!class_exists('WCMP_COMPACTAUDIOPLAYER_ADDON'))
3
+ {
4
+ class WCMP_COMPACTAUDIOPLAYER_ADDON
5
+ {
6
+ private $_wcmp;
7
+
8
+ function __construct($wcmp)
9
+ {
10
+ $this->_wcmp = $wcmp;
11
+ add_action('wcmp_addon_general_settings', array($this, 'general_settings'));
12
+ add_action('wcmp_save_setting', array($this, 'save_general_settings'));
13
+ add_filter('wcmp_audio_tag', array($this, 'generate_player'), 99, 4);
14
+ add_filter('wcmp_widget_audio_tag', array($this, 'generate_player'), 99, 4);
15
+ add_filter('wcmp_product_attr', array($this, 'product_attr'), 99, 3);
16
+ add_filter('wcmp_global_attr', array($this, 'global_attr'), 99, 2);
17
+ } // End __construct
18
+
19
+ private function _player_exists()
20
+ {
21
+ return defined('SC_AUDIO_PLUGIN_VERSION');
22
+ } // End _player_exists
23
+
24
+ private function _is_enabled()
25
+ {
26
+ return get_option('wcmp_addon_player') == 'compactaudioplayer';
27
+ } // End _is_enabled
28
+
29
+ public function general_settings()
30
+ {
31
+ $enabled = ($this->_player_exists() && $this->_is_enabled());
32
+
33
+ print '<tr><td><input aria-label="'.esc_attr(__('Use Compact Audio Player instead of the current plugin players','music-player-for-woocommerce')).'" type="radio" value="compactaudioplayer" name="wcmp_addon_player" '.($enabled ? 'CHECKED' : '').($this->_player_exists() ? '' : ' DISABLED').' class="wcmp_radio"></td><td width="100%"><b>'.__('Use "Compact Audio Player" instead of the current plugin players', 'music-player-for-woocommerce').'</b><br><i>'.
34
+ ($this->_player_exists()
35
+ ? __('The player functions configured above do not apply, except for audio protection if applicable.<br>This player <b>will take precedence</b> over the player configured in the products\' settings.', 'music-player-for-woocommerce')
36
+ : __('The "Compact WP Audio Player" plugin is not installed on your WordPress.', 'music-player-for-woocommerce')
37
+ )
38
+ .'</i></td></tr>';
39
+ } // End general_settings
40
+
41
+ public function save_general_settings()
42
+ {
43
+ if($this->_player_exists())
44
+ {
45
+ if(isset($_POST['wcmp_addon_player'])) update_option('wcmp_addon_player', sanitize_text_field($_POST['wcmp_addon_player']));
46
+ else delete_option('wcmp_addon_player');
47
+ }
48
+ } // End save_general_settings
49
+
50
+ public function generate_player($player, $product_id, $file_index, $url)
51
+ {
52
+ if($this->_player_exists() && $this->_is_enabled())
53
+ return do_shortcode('[sc_embed_player fileurl="'.esc_attr($url).'"]');
54
+ return $player;
55
+ } // End generate_player
56
+
57
+ public function product_attr($value, $product_id, $attribute)
58
+ {
59
+ if(
60
+ !is_admin() &&
61
+ $this->_player_exists() &&
62
+ $this->_is_enabled() &&
63
+ $attribute == '_wcmp_player_controls'
64
+ ) return 'button';
65
+
66
+ return $value;
67
+ } // End product_attr
68
+
69
+ public function global_attr($value, $attribute)
70
+ {
71
+ if(
72
+ !is_admin() &&
73
+ $this->_player_exists() &&
74
+ $this->_is_enabled() &&
75
+ $attribute == '_wcmp_player_controls'
76
+ ) return 'button';
77
+
78
+ return $value;
79
+ } // End global_attr
80
+
81
+ } // End WCMP_COMPACTAUDIOPLAYER_ADDON
82
+ }
83
+
84
+ new WCMP_COMPACTAUDIOPLAYER_ADDON($wcmp);
addons/ap-cp-media-player.addon.php ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!class_exists('WCMP_CPMEDIAPLAYER_ADDON'))
3
+ {
4
+ class WCMP_CPMEDIAPLAYER_ADDON
5
+ {
6
+ private $_wcmp;
7
+
8
+ function __construct($wcmp)
9
+ {
10
+ $this->_wcmp = $wcmp;
11
+ add_action('wcmp_addon_general_settings', array($this, 'general_settings'));
12
+ add_action('wcmp_save_setting', array($this, 'save_general_settings'));
13
+ add_filter('wcmp_audio_tag', array($this, 'generate_player'), 99, 4);
14
+ add_filter('wcmp_widget_audio_tag', array($this, 'generate_player'), 99, 4);
15
+ add_filter('wcmp_product_attr', array($this, 'product_attr'), 99, 3);
16
+ add_filter('wcmp_global_attr', array($this, 'global_attr'), 99, 2);
17
+ } // End __construct
18
+
19
+ private function _player_exists()
20
+ {
21
+ return defined('CPMP_VERSION');
22
+ } // End _player_exists
23
+
24
+ private function _is_enabled()
25
+ {
26
+ return get_option('wcmp_addon_player') == 'cpmediaplayer';
27
+ } // End _is_enabled
28
+
29
+ private function _load_skins($selected_option)
30
+ {
31
+ // Skins
32
+ $options = '';
33
+ if(defined('CPMP_PLUGIN_DIR'))
34
+ {
35
+ $skins = array();
36
+ $skin_dir = CPMP_PLUGIN_DIR.'/skins';
37
+ if(file_exists($skin_dir))
38
+ {
39
+ $d = dir($skin_dir);
40
+ while (false !== ($entry = $d->read()))
41
+ {
42
+ if($entry != '.' && $entry != '..' && is_dir($skin_dir.'/'.$entry))
43
+ {
44
+ $this_skin = $skin_dir.'/'.$entry.'/';
45
+ if(file_exists($this_skin))
46
+ {
47
+ $skin_data = parse_ini_file($this_skin.'config.ini', true);
48
+ $options .='<option value="'.$skin_data['id'].'" '.($skin_data['id'] == $selected_option ? 'SELECTED' : '').'>'.esc_html($skin_data['name']).'</option>';
49
+ }
50
+ }
51
+ }
52
+ $d->close();
53
+ }
54
+ }
55
+ return $options;
56
+ } // End _load_skins
57
+
58
+ private function _get_skin()
59
+ {
60
+ return get_option('wcmp_cpmediaplayer_addon_skin', 'classic-skin');
61
+ } // End _get_skin
62
+
63
+ private function _set_skin($v)
64
+ {
65
+ update_option('wcmp_cpmediaplayer_addon_skin', $v);
66
+ } // End _set_skin
67
+
68
+ public function general_settings()
69
+ {
70
+ $enabled = ($this->_player_exists() && $this->_is_enabled());
71
+
72
+ print '<tr><td><input aria-label="'.esc_attr(__('Use CP Media Player instead of the current plugin players','music-player-for-woocommerce')).'" type="radio" value="cpmediaplayer" name="wcmp_addon_player" '.($enabled ? 'CHECKED' : '').($this->_player_exists() ? '' : ' DISABLED').' class="wcmp_radio"></td><td width="100%"><b>'.__('Use "CP Media Player" instead of the current plugin players', 'music-player-for-woocommerce').'</b><br>
73
+ '.__('Select player skin', 'music-player-for-woocommerce').': <select name="wcmp_cpmediaplayer_addon_skin" '.($this->_player_exists() ? '' : ' DISABLED').'>'.$this->_load_skins($this->_get_skin()).'</select>
74
+ <br><i>'.
75
+ ($this->_player_exists()
76
+ ? __('The player functions configured above do not apply, except for audio protection if applicable.<br>This player <b>will take precedence</b> over the player configured in the products\' settings.', 'music-player-for-woocommerce')
77
+ : __('The "CP Media Player" plugin is not installed on your WordPress.', 'music-player-for-woocommerce')
78
+ )
79
+ .'</i></td></tr>';
80
+ } // End general_settings
81
+
82
+ public function save_general_settings()
83
+ {
84
+ if($this->_player_exists())
85
+ {
86
+ if(isset($_POST['wcmp_addon_player'])) update_option('wcmp_addon_player', sanitize_text_field($_POST['wcmp_addon_player']));
87
+ else delete_option('wcmp_addon_player');
88
+
89
+ if(isset($_POST['wcmp_cpmediaplayer_addon_skin'])) $this->_set_skin(sanitize_text_field($_POST['wcmp_cpmediaplayer_addon_skin']));
90
+ }
91
+ } // End save_general_settings
92
+
93
+ public function generate_player($player, $product_id, $file_index, $url)
94
+ {
95
+ if($this->_player_exists() && $this->_is_enabled())
96
+ {
97
+ wp_enqueue_style('wcmp-ap-cp-media-player-style', plugin_dir_url(__FILE__).'ap-cp-media-player/style.css');
98
+ return do_shortcode('[cpm-player skin="'.esc_attr($this->_get_skin()).'" playlist="false" type="audio"][cpm-item file="'.esc_attr($url).'"][/cpm-player]');
99
+ }
100
+ return $player;
101
+ } // End generate_player
102
+
103
+ public function product_attr($value, $product_id, $attribute)
104
+ {
105
+ if(
106
+ !is_admin() &&
107
+ $this->_player_exists() &&
108
+ $this->_is_enabled() &&
109
+ $attribute == '_wcmp_player_controls'
110
+ ) return 'all';
111
+
112
+ return $value;
113
+ } // End product_attr
114
+
115
+ public function global_attr($value, $attribute)
116
+ {
117
+ if(
118
+ !is_admin() &&
119
+ $this->_player_exists() &&
120
+ $this->_is_enabled() &&
121
+ $attribute == '_wcmp_player_controls'
122
+ ) return 'all';
123
+
124
+ return $value;
125
+ } // End global_attr
126
+
127
+ } // End WCMP_CPMEDIAPLAYER_ADDON
128
+ }
129
+
130
+ new WCMP_CPMEDIAPLAYER_ADDON($wcmp);
addons/ap-cp-media-player/style.css ADDED
@@ -0,0 +1 @@
 
1
+ .wcmp-widget-product .wcmp-widget-product-file{display:block !important;}
addons/ap-html5-audio-player.addon.php ADDED
@@ -0,0 +1,110 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!class_exists('WCMP_HTML5AUDIOPLAYER_ADDON'))
3
+ {
4
+ class WCMP_HTML5AUDIOPLAYER_ADDON
5
+ {
6
+ private $_wcmp;
7
+ private $_player_flag = false;
8
+
9
+ function __construct($wcmp)
10
+ {
11
+ $this->_wcmp = $wcmp;
12
+ add_action('wcmp_addon_general_settings', array($this, 'general_settings'));
13
+ add_action('wcmp_save_setting', array($this, 'save_general_settings'));
14
+ add_filter('wcmp_audio_tag', array($this, 'generate_player'), 99, 4);
15
+ add_filter('wcmp_widget_audio_tag', array($this, 'generate_player'), 99, 4);
16
+ add_filter('wcmp_product_attr', array($this, 'product_attr'), 99, 3);
17
+ add_filter('wcmp_global_attr', array($this, 'global_attr'), 99, 2);
18
+ add_action('wp_footer', array($this, 'add_script'));
19
+ } // End __construct
20
+
21
+ private function _player_exists()
22
+ {
23
+ return class_exists('H5APPlayer\Template\Player');
24
+ } // End _player_exists
25
+
26
+ private function _is_enabled()
27
+ {
28
+ return get_option('wcmp_addon_player') == 'html5audioplayer';
29
+ } // End _is_enabled
30
+
31
+ public function general_settings()
32
+ {
33
+ $enabled = ($this->_player_exists() && $this->_is_enabled());
34
+
35
+ print '<tr><td><input aria-label="'.esc_attr(__('Use HTML5 Audio Player instead of the current plugin players','music-player-for-woocommerce')).'" type="radio" value="html5audioplayer" name="wcmp_addon_player" '.($enabled ? 'CHECKED' : '').($this->_player_exists() ? '' : ' DISABLED').' class="wcmp_radio"></td><td width="100%"><b>'.__('Use "HTML5 Audio Player" instead of the current plugin players', 'music-player-for-woocommerce').'</b><br><i>'.
36
+ ($this->_player_exists()
37
+ ? __('The player functions configured above do not apply, except for audio protection if applicable.<br>This player <b>will take precedence</b> over the player configured in the products\' settings.', 'music-player-for-woocommerce')
38
+ : __('The "HTML5 Audio Player" plugin is not installed on your WordPress.', 'music-player-for-woocommerce')
39
+ )
40
+ .'</i></td></tr>';
41
+ } // End general_settings
42
+
43
+ public function save_general_settings()
44
+ {
45
+ if($this->_player_exists())
46
+ {
47
+ if(isset($_POST['wcmp_addon_player'])) update_option('wcmp_addon_player', sanitize_text_field($_POST['wcmp_addon_player']));
48
+ else delete_option('wcmp_addon_player');
49
+ }
50
+ } // End save_general_settings
51
+
52
+ public function generate_player($player, $product_id, $file_index, $url)
53
+ {
54
+ if($this->_player_exists() && $this->_is_enabled())
55
+ {
56
+ wp_enqueue_style('wcmp-ap-html5-audio-player-style', plugin_dir_url(__FILE__).'ap-html5-audio-player/style.css');
57
+ $this->_player_flag = true;
58
+ $d = '';
59
+ if(preg_match('/data-duration="[^"]+"/', $player,$matches))
60
+ {
61
+ $d = $matches[0];
62
+ }
63
+
64
+ return str_replace('<audio', '<audio '.$d.' ', H5APPlayer\Template\Player::html(
65
+ [
66
+ 'template' => [
67
+ 'attr' => '',
68
+ 'width' => 'auto',
69
+ 'source' => $url
70
+ ]
71
+ ]
72
+ ));
73
+ }
74
+ return $player;
75
+ } // End generate_player
76
+
77
+ public function product_attr($value, $product_id, $attribute)
78
+ {
79
+ if(
80
+ !is_admin() &&
81
+ $this->_player_exists() &&
82
+ $this->_is_enabled() &&
83
+ $attribute == '_wcmp_player_controls'
84
+ ) return 'all';
85
+
86
+ return $value;
87
+ } // End product_attr
88
+
89
+ public function global_attr($value, $attribute)
90
+ {
91
+ if(
92
+ !is_admin() &&
93
+ $this->_player_exists() &&
94
+ $this->_is_enabled() &&
95
+ $attribute == '_wcmp_player_controls'
96
+ ) return 'all';
97
+
98
+ return $value;
99
+ } // End global_attr
100
+
101
+ public function add_script()
102
+ {
103
+ if($this->_player_flag)
104
+ print '<script>jQuery("audio[data-duration]").on("timeupdate", function(){var d = jQuery(this).data("duration"), c = jQuery(this).closest(".plyr--audio"); if(c.length) c.find(".plyr__time--duration").html(d);})</script>';
105
+ } // End add_script
106
+
107
+ } // End WCMP_HTML5AUDIOPLAYER_ADDON
108
+ }
109
+
110
+ new WCMP_HTML5AUDIOPLAYER_ADDON($wcmp);
addons/ap-html5-audio-player/style.css ADDED
@@ -0,0 +1 @@
 
1
+ .wcmp-widget-product .wcmp-widget-product-file{display:block !important;}
addons/ap-mp3-jplayer.addon.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if(!class_exists('WCMP_MP3JPLAYER_ADDON'))
3
+ {
4
+ class WCMP_MP3JPLAYER_ADDON
5
+ {
6
+ private $_wcmp;
7
+
8
+ function __construct($wcmp)
9
+ {
10
+ $this->_wcmp = $wcmp;
11
+ add_action('wcmp_addon_general_settings', array($this, 'general_settings'));
12
+ add_action('wcmp_save_setting', array($this, 'save_general_settings'));
13
+ add_filter('wcmp_audio_tag', array($this, 'generate_player'), 99, 4);
14
+ add_filter('wcmp_widget_audio_tag', array($this, 'generate_player'), 99, 4);
15
+ add_filter('wcmp_product_attr', array($this, 'product_attr'), 99, 3);
16
+ add_filter('wcmp_global_attr', array($this, 'global_attr'), 99, 2);
17
+ } // End __construct
18
+
19
+ private function _player_exists()
20
+ {
21
+ return class_exists('MP3j_Front');
22
+ } // End _player_exists
23
+
24
+ private function _is_enabled()
25
+ {
26
+ return get_option('wcmp_addon_player') == 'mp3jplayer';
27
+ } // End _is_enabled
28
+
29
+ public function general_settings()
30
+ {
31
+ $enabled = ($this->_player_exists() && $this->_is_enabled());
32
+
33
+ print '<tr><td><input aria-label="'.esc_attr(__('Use MP3 jPlayer instead of the current plugin players','music-player-for-woocommerce')).'" type="radio" value="mp3jplayer" name="wcmp_addon_player" '.($enabled ? 'CHECKED' : '').($this->_player_exists() ? '' : ' DISABLED').' class="wcmp_radio"></td><td width="100%"><b>'.__('Use "MP3 jPlayer" instead of the current plugin players', 'music-player-for-woocommerce').'</b><br><i>'.
34
+ ($this->_player_exists()
35
+ ? __('The player functions configured above do not apply, except for audio protection if applicable.<br>This player <b>will take precedence</b> over the player configured in the products\' settings.', 'music-player-for-woocommerce')
36
+ : __('The "MP3 jPlayer" plugin is not installed on your WordPress.', 'music-player-for-woocommerce')
37
+ )
38
+ .'</i></td></tr>';
39
+ } // End general_settings
40
+
41
+ public function save_general_settings()
42
+ {
43
+ if($this->_player_exists())
44
+ {
45
+ if(isset($_POST['wcmp_addon_player'])) update_option('wcmp_addon_player', sanitize_text_field($_POST['wcmp_addon_player']));
46
+ else delete_option('wcmp_addon_player');
47
+ }
48
+ } // End save_general_settings
49
+
50
+ public function generate_player($player, $product_id, $file_index, $url)
51
+ {
52
+ if($this->_player_exists() && $this->_is_enabled())
53
+ {
54
+ wp_enqueue_style('wcmp-ap-mp3-jplayer-style', plugin_dir_url(__FILE__).'ap-mp3-jplayer/style.css');
55
+ if(!preg_match('/^http(s?)\:/i', $url))
56
+ $url = 'http'.(is_ssl() ? 's' : '' ).'://'.$_SERVER['HTTP_HOST'].$url;
57
+ if(!preg_match('/\.mp3$/i', $url))
58
+ $url .= (strpos($url, '?') === false ? '?' : '&').'file.mp3';
59
+ return do_shortcode('[mp3-jplayer tracks="'.str_replace('"', '\"', $url).'" title="" width="100%" style="fullbars notitle nopopoutbutton" height="30px"]');
60
+ }
61
+ return $player;
62
+ } // End generate_player
63
+
64
+ public function product_attr($value, $product_id, $attribute)
65
+ {
66
+ if(
67
+ !is_admin() &&
68
+ $this->_player_exists() &&
69
+ $this->_is_enabled() &&
70
+ $attribute == '_wcmp_player_controls'
71
+ ) return 'all';
72
+
73
+ return $value;
74
+ } // End product_attr
75
+
76
+ public function global_attr($value, $attribute)
77
+ {
78
+ if(
79
+ !is_admin() &&
80
+ $this->_player_exists() &&
81
+ $this->_is_enabled() &&
82
+ $attribute == '_wcmp_player_controls'
83
+ ) return 'all';
84
+
85
+ return $value;
86
+ } // End global_attr
87
+
88
+ } // End WCMP_MP3JPLAYER_ADDON
89
+ }
90
+
91
+ new WCMP_MP3JPLAYER_ADDON($wcmp);
addons/ap-mp3-jplayer/style.css ADDED
@@ -0,0 +1 @@
 
1
+ .wcmp-widget-product .wcmp-widget-product-file{display:block !important;}
addons/dokan.addon.php CHANGED
@@ -9,7 +9,7 @@ if(!class_exists('WCMP_DOKAN_ADDON'))
9
  {
10
  $this->_wcmp = $wcmp;
11
 
12
- if(get_option('wcmp_dokan_enabled', 1))
13
  {
14
  add_action('dokan_product_edit_after_main',array($this, 'product_settings'));
15
  add_action('dokan_process_product_meta',array($this, 'save_product_settings'));
@@ -22,22 +22,31 @@ if(!class_exists('WCMP_DOKAN_ADDON'))
22
  public function general_settings()
23
  {
24
  $wcmp_dokan_enabled = get_option('wcmp_dokan_enabled', 1);
25
- print '<tr><td><input aria-label="'.esc_attr(__('Activate the Dokan add-on','music-player-for-woocommerce')).'" type="checkbox" name="wcmp_dokan_enabled" '.($wcmp_dokan_enabled ? 'CHECKED' : '').'></td><td width="100%"><b>'.__('Activate the Dokan add-on', 'music-player-for-woocommerce').'</b><br><i>'.__('If the "Dokan Multivendor" plugin is installed on the website, check the checkbox to allow vendors to configure their music players.', 'music-player-for-woocommerce').'</i></td></tr>';
 
 
26
  } // End general_setting
27
 
28
  public function save_general_settings()
29
  {
30
  update_option('wcmp_dokan_enabled', (!empty($_POST['wcmp_dokan_enabled'])) ? 1 : 0);
 
31
  } // End save_general_settings
32
 
33
  public function product_settings()
34
  {
 
 
 
35
  wp_enqueue_style('wcmp-dokan', plugin_dir_url(__FILE__).'dokan/style.css');
36
  include dirname(__FILE__).'/dokan/player_options.php';
37
  } // End product_settings
38
 
39
  public function save_product_settings($post_id)
40
  {
 
 
 
41
  $post = get_post($post_id);
42
  $this->_wcmp->save_post($post_id, $post, true);
43
  } // End save_product_settings
9
  {
10
  $this->_wcmp = $wcmp;
11
 
12
+ if(get_option('wcmp_dokan_enabled', 1) && !get_option('wcmp_dokan_hide_settings', 0))
13
  {
14
  add_action('dokan_product_edit_after_main',array($this, 'product_settings'));
15
  add_action('dokan_process_product_meta',array($this, 'save_product_settings'));
22
  public function general_settings()
23
  {
24
  $wcmp_dokan_enabled = get_option('wcmp_dokan_enabled', 1);
25
+ $wcmp_dokan_hide_settings = get_option('wcmp_dokan_hide_settings', 0);
26
+ print '<tr><td><input aria-label="'.esc_attr(__('Activate the Dokan add-on','music-player-for-woocommerce')).'" type="checkbox" name="wcmp_dokan_enabled" '.($wcmp_dokan_enabled ? 'CHECKED' : '').'></td><td width="100%"><b>'.__('Activate the Dokan add-on', 'music-player-for-woocommerce').'</b><br><i>'.__('If the "Dokan Multivendor" plugin is installed on the website, check the checkbox to allow vendors to configure their music players.', 'music-player-for-woocommerce').'</i><br><br>
27
+ <input type="checkbox" aria-label="'.esc_attr(__('Hide settings', 'music-player-for-woocommerce')).'" name="wcmp_dokan_hide_settings" '.($wcmp_dokan_hide_settings ? 'CHECKED' : '').'> '.__('Hides the players settings from vendors interface.', 'music-player-for-woocommerce').'</td></tr>';
28
  } // End general_setting
29
 
30
  public function save_general_settings()
31
  {
32
  update_option('wcmp_dokan_enabled', (!empty($_POST['wcmp_dokan_enabled'])) ? 1 : 0);
33
+ update_option('wcmp_dokan_hide_settings', (!empty($_POST['wcmp_dokan_hide_settings'])) ? 1 : 0);
34
  } // End save_general_settings
35
 
36
  public function product_settings()
37
  {
38
+ global $wcmp_dokan_flag;
39
+ $wcmp_dokan_flag = true;
40
+
41
  wp_enqueue_style('wcmp-dokan', plugin_dir_url(__FILE__).'dokan/style.css');
42
  include dirname(__FILE__).'/dokan/player_options.php';
43
  } // End product_settings
44
 
45
  public function save_product_settings($post_id)
46
  {
47
+ global $wcmp_dokan_flag;
48
+ $wcmp_dokan_flag = true;
49
+
50
  $post = get_post($post_id);
51
  $this->_wcmp->save_post($post_id, $post, true);
52
  } // End save_product_settings
addons/wcfm.addon.php CHANGED
@@ -9,7 +9,7 @@ if(!class_exists('WCMP_WCFM_ADDON'))
9
  {
10
  $this->_wcmp = $wcmp;
11
 
12
- if(get_option('wcmp_wcfm_enabled', 1))
13
  {
14
  add_action('after_wcfm_products_downloadable',array($this, 'product_settings'), 10, 2);
15
  add_action('save_post_product', array($this, 'save_product_settings'), 10, 3);
@@ -22,16 +22,22 @@ if(!class_exists('WCMP_WCFM_ADDON'))
22
  public function general_settings()
23
  {
24
  $wcmp_wcfm_enabled = get_option('wcmp_wcfm_enabled', 1);
25
- print '<tr><td><input aria-label="'.esc_attr(__('Activate the WCFM add-on','music-player-for-woocommerce')).'" type="checkbox" name="wcmp_wcfm_enabled" '.($wcmp_wcfm_enabled ? 'CHECKED' : '').'></td><td width="100%"><b>'.__('Activate the WCFM add-on', 'music-player-for-woocommerce').'</b><br><i>'.__('If the "WCFM - Marketplace" plugin is installed on the website, check the checkbox to allow vendors to configure their music players.', 'music-player-for-woocommerce').'</i></td></tr>';
 
 
26
  } // End general_settings
27
 
28
  public function save_general_settings()
29
  {
30
  update_option('wcmp_wcfm_enabled', (!empty($_POST['wcmp_wcfm_enabled'])) ? 1 : 0);
 
31
  } // End save_general_settings
32
 
33
  public function product_settings($product_id, $product_type)
34
  {
 
 
 
35
  $post = get_post( $product_id );
36
  wp_enqueue_style('wcmp-wcfm-css', plugin_dir_url(__FILE__).'wcfm/style.css');
37
  wp_enqueue_script('wcmp-wcfm-js', plugin_dir_url(__FILE__).'wcfm/script.js');
@@ -54,6 +60,8 @@ if(!class_exists('WCMP_WCFM_ADDON'))
54
  {
55
  if(!empty($_POST['wcfm_products_manage_form']))
56
  {
 
 
57
  $arr = wp_parse_args($_POST['wcfm_products_manage_form']);
58
  if(!empty($arr))
59
  {
9
  {
10
  $this->_wcmp = $wcmp;
11
 
12
+ if(get_option('wcmp_wcfm_enabled', 1) && !get_option('wcmp_wcfm_hide_settings', 0))
13
  {
14
  add_action('after_wcfm_products_downloadable',array($this, 'product_settings'), 10, 2);
15
  add_action('save_post_product', array($this, 'save_product_settings'), 10, 3);
22
  public function general_settings()
23
  {
24
  $wcmp_wcfm_enabled = get_option('wcmp_wcfm_enabled', 1);
25
+ $wcmp_wcfm_hide_settings = get_option('wcmp_wcfm_hide_settings', 0);
26
+ print '<tr><td><input aria-label="'.esc_attr(__('Activate the WCFM add-on','music-player-for-woocommerce')).'" type="checkbox" name="wcmp_wcfm_enabled" '.($wcmp_wcfm_enabled ? 'CHECKED' : '').'></td><td width="100%"><b>'.__('Activate the WCFM add-on', 'music-player-for-woocommerce').'</b><br><i>'.__('If the "WCFM - Marketplace" plugin is installed on the website, check the checkbox to allow vendors to configure their music players.', 'music-player-for-woocommerce').'</i><br><br>
27
+ <input type="checkbox" aria-label="'.esc_attr(__('Hide settings', 'music-player-for-woocommerce')).'" name="wcmp_wcfm_hide_settings" '.($wcmp_wcfm_hide_settings ? 'CHECKED' : '').'> '.__('Hides the players settings from vendors interface.', 'music-player-for-woocommerce').'</td></tr>';
28
  } // End general_settings
29
 
30
  public function save_general_settings()
31
  {
32
  update_option('wcmp_wcfm_enabled', (!empty($_POST['wcmp_wcfm_enabled'])) ? 1 : 0);
33
+ update_option('wcmp_wcfm_hide_settings', (!empty($_POST['wcmp_wcfm_hide_settings'])) ? 1 : 0);
34
  } // End save_general_settings
35
 
36
  public function product_settings($product_id, $product_type)
37
  {
38
+ global $wcmp_wcfm_flag;
39
+ $wcmp_wcfm_flag = true;
40
+
41
  $post = get_post( $product_id );
42
  wp_enqueue_style('wcmp-wcfm-css', plugin_dir_url(__FILE__).'wcfm/style.css');
43
  wp_enqueue_script('wcmp-wcfm-js', plugin_dir_url(__FILE__).'wcfm/script.js');
60
  {
61
  if(!empty($_POST['wcfm_products_manage_form']))
62
  {
63
+ global $wcmp_wcfm_flag;
64
+ $wcmp_wcfm_flag = true;
65
  $arr = wp_parse_args($_POST['wcfm_products_manage_form']);
66
  if(!empty($arr))
67
  {
addons/wcv.addon.php CHANGED
@@ -8,12 +8,22 @@ if(!class_exists('WCMP_WCVENDORS_ADDON'))
8
  function __construct($wcmp)
9
  {
10
  $this->_wcmp = $wcmp;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
- if(get_option('wcmp_wcv_enabled', 1))
13
- {
14
- add_action('wcv-after_seo_tab',array($this, 'product_settings'), 10, 2);
15
- add_action('wcv_save_product', array($this, 'save_product_settings'));
16
- }
17
  add_action('wcv_delete_post', array($this, 'delete_product'));
18
  add_action('wcmp_addon_general_settings', array($this, 'general_settings'));
19
  add_action('wcmp_save_setting', array($this, 'save_general_settings'));
@@ -22,43 +32,22 @@ if(!class_exists('WCMP_WCVENDORS_ADDON'))
22
  public function general_settings()
23
  {
24
  $wcmp_wcv_enabled = get_option('wcmp_wcv_enabled', 1);
25
- print '<tr><td><input aria-label="'.esc_attr(__('Activate the WC Vendors add-on','music-player-for-woocommerce')).'" type="checkbox" name="wcmp_wcv_enabled" '.($wcmp_wcv_enabled ? 'CHECKED' : '').'></td><td width="100%"><b>'.__('Activate the WC Vendors add-on (Experimental add-on)', 'music-player-for-woocommerce').'</b><br><i>'.__('If the "WC Vendors" plugin is installed on the website, check the checkbox to allow vendors to configure their music players.', 'music-player-for-woocommerce').'</i></td></tr>';
 
 
26
  } // End general_settings
27
 
28
  public function save_general_settings()
29
  {
30
  update_option('wcmp_wcv_enabled', (!empty($_POST['wcmp_wcv_enabled'])) ? 1 : 0);
 
31
  } // End save_general_settings
32
 
33
- public function product_settings($product_id)
34
- {
35
- $post = get_post( $product_id );
36
- wp_enqueue_style('wcmp-wcv-css', plugin_dir_url(__FILE__).'wcv/style.css');
37
- ?>
38
- <div class="wcv-container">
39
- <h6><?php _e('Music Player', 'music-player-for-woocommerce'); ?></h6>
40
- <input type="hidden" name="wcmp_nonce" value="<?php echo wp_create_nonce('wcmp_updating_product'); ?>" />
41
- <?php
42
- include_once dirname(__FILE__).'/../views/player_options.php';
43
- ?>
44
- </div>
45
- <?php
46
- } // End product_settings
47
-
48
- public function save_product_settings($post_id)
49
- {
50
- $post = wc_get_product( $post_id );
51
- $this->_wcmp->save_post($post_id, $post, true);
52
- } // End save_product_settings
53
-
54
  public function delete_product($post_id)
55
  {
56
  $this->_wcmp->delete_post($post_id);
57
  } // End delete_product
58
 
59
- //******************** PRIVATE METHODS ************************
60
-
61
-
62
  } // End WCMP_WCVENDORS_ADDON
63
  }
64
 
8
  function __construct($wcmp)
9
  {
10
  $this->_wcmp = $wcmp;
11
+ add_action('admin_init', function(){
12
+ if(get_current_user_id()) {
13
+ $user = wp_get_current_user();
14
+ $roles = ( array ) $user->roles;
15
+ if(in_array('vendor', $roles) && class_exists('WC_Vendors'))
16
+ {
17
+ global $wcmp_wcv_flag;
18
+ $wcmp_wcv_flag = true;
19
+ if(!get_option('wcmp_wcv_enabled', 1) || get_option('wcmp_wcv_hide_settings', 0))
20
+ {
21
+ remove_meta_box('wcmp_woocommerce_metabox', 'product', 'normal');
22
+ }
23
+ }
24
+ }
25
+ },99);
26
 
 
 
 
 
 
27
  add_action('wcv_delete_post', array($this, 'delete_product'));
28
  add_action('wcmp_addon_general_settings', array($this, 'general_settings'));
29
  add_action('wcmp_save_setting', array($this, 'save_general_settings'));
32
  public function general_settings()
33
  {
34
  $wcmp_wcv_enabled = get_option('wcmp_wcv_enabled', 1);
35
+ $wcmp_wcv_hide_settings = get_option('wcmp_wcv_hide_settings', 0);
36
+ print '<tr><td><input aria-label="'.esc_attr(__('Activate the WC Vendors add-on','music-player-for-woocommerce')).'" type="checkbox" name="wcmp_wcv_enabled" '.($wcmp_wcv_enabled ? 'CHECKED' : '').'></td><td width="100%"><b>'.__('Activate the WC Vendors add-on (Experimental add-on)', 'music-player-for-woocommerce').'</b><br><i>'.__('If the "WC Vendors" plugin is installed on the website, check the checkbox to allow vendors to configure their music players.', 'music-player-for-woocommerce').'</i><br><br>
37
+ <input type="checkbox" aria-label="'.esc_attr(__('Hide settings', 'music-player-for-woocommerce')).'" name="wcmp_wcv_hide_settings" '.($wcmp_wcv_hide_settings ? 'CHECKED' : '').'> '.__('Hides the players settings from vendors interface.', 'music-player-for-woocommerce').'</td></tr>';
38
  } // End general_settings
39
 
40
  public function save_general_settings()
41
  {
42
  update_option('wcmp_wcv_enabled', (!empty($_POST['wcmp_wcv_enabled'])) ? 1 : 0);
43
+ update_option('wcmp_wcv_hide_settings', (!empty($_POST['wcmp_wcv_hide_settings'])) ? 1 : 0);
44
  } // End save_general_settings
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  public function delete_product($post_id)
47
  {
48
  $this->_wcmp->delete_post($post_id);
49
  } // End delete_product
50
 
 
 
 
51
  } // End WCMP_WCVENDORS_ADDON
52
  }
53
 
css/style.css CHANGED
@@ -14,10 +14,11 @@
14
  .wcmp-player.track.mejs-wmp{width:40px !important;height:40px !important;}
15
  .wcmp-player.track.mejs-wmp .mejs-controls{height:40px !important; width:40px !important; background:transparent !important;}
16
 
17
- .wcmp-player-list{width:100%; border:0;overflow:visible;}
18
  .wcmp-player-list *{word-break:normal !important;}
19
  .wcmp-player-list td{border:0;padding:5px;}
20
  .wcmp-player-list table{width:100%;margin:0;}
 
21
  .wcmp-player-list table td{border:0;}
22
  .wcmp-odd-row td,
23
  .wcmp-even-row td{padding:5px;vertical-align:middle;}
@@ -32,7 +33,7 @@
32
 
33
  .wcmp-player .mejs-time-hovered,
34
  .wcmp-player .mejs-time-handle-content{display:none !important;}
35
-
36
  .wcmp-player .mejs-controls .mejs-time-rail .mejs-time-buffering,
37
  .wcmp-player .mejs-controls .mejs-time-rail .mejs-time-current,
38
  .wcmp-player .mejs-controls .mejs-time-rail .mejs-time-hovered,
14
  .wcmp-player.track.mejs-wmp{width:40px !important;height:40px !important;}
15
  .wcmp-player.track.mejs-wmp .mejs-controls{height:40px !important; width:40px !important; background:transparent !important;}
16
 
17
+ .wcmp-player-list{width:100%; border:0;overflow:visible;margin-bottom:10px;}
18
  .wcmp-player-list *{word-break:normal !important;}
19
  .wcmp-player-list td{border:0;padding:5px;}
20
  .wcmp-player-list table{width:100%;margin:0;}
21
+ .wcmp-player-list table tr,
22
  .wcmp-player-list table td{border:0;}
23
  .wcmp-odd-row td,
24
  .wcmp-even-row td{padding:5px;vertical-align:middle;}
33
 
34
  .wcmp-player .mejs-time-hovered,
35
  .wcmp-player .mejs-time-handle-content{display:none !important;}
36
+ .wcmp-player .mejs-controls .mejs-time{height:auto;}
37
  .wcmp-player .mejs-controls .mejs-time-rail .mejs-time-buffering,
38
  .wcmp-player .mejs-controls .mejs-time-rail .mejs-time-current,
39
  .wcmp-player .mejs-controls .mejs-time-rail .mejs-time-hovered,
js/admin.js ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function wcmp_admin()
2
+ {
3
+ if(typeof wcmp_admin_evaluated != 'undefined') return;
4
+ wcmp_admin_evaluated = true;
5
+
6
+ var $ = jQuery;
7
+
8
+ // Special Radio
9
+ $( document ).on(
10
+ 'mousedown',
11
+ '.wcmp_radio',
12
+ function()
13
+ {
14
+ $(this).data('status', this.checked);
15
+ }
16
+ );
17
+
18
+ $( document ).on(
19
+ 'click',
20
+ '.wcmp_radio',
21
+ function()
22
+ {
23
+ this.checked = !$(this).data('status');
24
+ }
25
+ );
26
+ }
27
+
28
+ jQuery(wcmp_admin);
29
+ jQuery(window).on('load', wcmp_admin);
js/public.js CHANGED
@@ -1,12 +1,13 @@
1
- var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,c,b){a instanceof String&&(a=String(a));for(var f=a.length,e=0;e<f;e++){var d=a[e];if(c.call(b,d,e,a))return{i:e,v:d}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
2
- $jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,c,b){a!=Array.prototype&&a!=Object.prototype&&(a[c]=b.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);
3
- $jscomp.polyfill=function(a,c,b,f){if(c){b=$jscomp.global;a=a.split(".");for(f=0;f<a.length-1;f++){var e=a[f];e in b||(b[e]={});b=b[e]}a=a[a.length-1];f=b[a];c=c(f);c!=f&&null!=c&&$jscomp.defineProperty(b,a,{configurable:!0,writable:!0,value:c})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,b){return $jscomp.findInternal(this,a,b).v}},"es6","es3");
4
- (function(){var a=[],c=0;window.generate_the_wcmp=function(b){function f(g){if(g+1<c){var h=g+1;a[h]instanceof d&&a[h].is("a")?a[h].is(":visible")?a[h].click():f(g+1):d(a[h].container).is(":visible")?a[h].play():f(g+1)}}function e(a){var g=a.data("product"),b=d("img.product-"+g);b.length&&1==d('[data-product="'+g+'"]').length&&(g=b.offset(),a=a.closest("div.wcmp-player"),a.css({position:"absolute","z-index":999999}).offset({left:g.left+(b.width()-a.width())/2,top:g.top+(b.height()-a.height())/2}))}
5
- if(!("boolean"!==typeof b&&"undefined"!=typeof wcmp_global_settings&&1*wcmp_global_settings.onload)&&"undefined"===typeof generated_the_wcmp){generated_the_wcmp=!0;var d=jQuery;d(document).on("click",".wcmp-player-container",function(a){a.preventDefault();a.stopPropagation()});d.expr[":"].regex=function(a,b,c){b=c[3].split(",");var l=/^(data|css):/;c=b[0].match(l)?b[0].split(":")[0]:"attr";l=b.shift().replace(l,"");return(new RegExp(b.join("").replace(/^\s+|\s+$/g,""),"ig")).test(d(a)[c](l))};var q=
6
- "undefined"!=typeof wcmp_global_settings?wcmp_global_settings.play_all:!0,k="undefined"!=typeof wcmp_global_settings?!(1*wcmp_global_settings.play_simultaneously):!0,n="undefined"!=typeof wcmp_global_settings?1*wcmp_global_settings.fade_out:!0,p="undefined"!=typeof wcmp_global_settings&&"ios_controls"in wcmp_global_settings&&1*wcmp_global_settings.ios_controls?!0:!1;b=d("audio.wcmp-player:not(.track):not([playernumber])");var r=d("audio.wcmp-player.track:not([playernumber])"),m={pauseOtherPlayers:k,
7
- iPadUseNativeControls:p,iPhoneUseNativeControls:p,success:function(a,b){d(b).attr("volume")&&a.setVolume(parseFloat(d(b).attr("volume")));var g=function(a){a=d(a.target||a.detail.target);var l=a.data("duration");"undefined"!=typeof l&&a.closest(".wcmp-player-container").find(".mejs-duration").html(l)};a.addEventListener("timeupdate",function(a){g(a);a=a.target||a.detail.target;isNaN(a.currentTime)||isNaN(a.duration)||(n&&4>a.duration-a.currentTime?a.setVolume(a.volume-a.volume/3):("undefined"==typeof a.bkVolume&&
8
- (a.bkVolume=a.volume),a.setVolume(a.bkVolume)))});a.addEventListener("volumechange",function(a){a=a.target||a.detail.target;isNaN(a.currentTime)||isNaN(a.duration)||!(4<a.duration-a.currentTime)&&n||!a.currentTime||(a.bkVolume=a.volume)});a.addEventListener("ended",function(a){a=a.target||a.detail.target;1*q&&(a=1*d(a).attr("playernumber"),f(a))});a.addEventListener("loadedmetadata",function(a){g(a)})}};k=".product-type-grouped :regex(name,quantity\\[\\d+\\])";b.each(function(){var b=d(this);b.find("source").attr("src");
9
- b.attr("playernumber",c);m.audioVolume="vertical";try{a[c]=new MediaElementPlayer(b[0],m)}catch(h){"console"in window&&console.log(h)}c++});r.each(function(){var b=d(this);b.find("source").attr("src");b.attr("playernumber",c);m.features=["playpause"];try{a[c]=new MediaElementPlayer(b[0],m)}catch(h){"console"in window&&console.log(h)}c++;e(b);d(window).resize(function(){e(b)})});d(k).length||(k=".product-type-grouped [data-product_id]");d(k).length||(k=".woocommerce-grouped-product-list [data-product_id]");
10
- d(k).length||(k='.woocommerce-grouped-product-list [id*="product-"]');d(k).each(function(){try{var a=d(this),b=(a.data("product_id")||a.attr("name")||a.attr("id")).replace(/[^\d]/g,""),c=d(".wcmp-player-list.merge_in_grouped_products .product-"+b+":first .wcmp-player-title"),e=d("<table></table>");c.length&&!c.closest(".wcmp-first-in-product").length&&(c.closest("tr").addClass("wcmp-first-in-product"),0==c.closest("form").length&&c.closest(".wcmp-player-list").prependTo(a.closest("form")),e.append(a.closest("tr").prepend("<td>"+
11
- c.html()+"</td>")),c.html("").append(e))}catch(t){}})}};window.wcmp_force_init=function(){delete window.generated_the_wcmp;generate_the_wcmp(!0)};jQuery(generate_the_wcmp);jQuery(window).on("load",function(){generate_the_wcmp(!0);var a=jQuery,c=window.navigator.userAgent;a("[data-lazyloading]").each(function(){var b=a(this);b.attr("preload",b.data("lazyloading"))});if(c.match(/iPad/i)||c.match(/iPhone/i))if("undefined"!=typeof wcmp_global_settings?wcmp_global_settings.play_all:1)a(".wcmp-player .mejs-play button").one("click",
12
- function(){if("undefined"==typeof wcmp_preprocessed_players){wcmp_preprocessed_players=!0;var b=a(this);a(".wcmp-player audio").each(function(){this.play();this.pause()});setTimeout(function(){b.click()},500)}})}).on("popstate",function(){jQuery("audio[data-product]:not([playernumber])").length&&wcmp_force_init()});jQuery(document).on("scroll",wcmp_force_init)})();
 
1
+ var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,e,b){a instanceof String&&(a=String(a));for(var f=a.length,h=0;h<f;h++){var c=a[h];if(e.call(b,c,h,a))return{i:h,v:c}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
2
+ $jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,e,b){a!=Array.prototype&&a!=Object.prototype&&(a[e]=b.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);
3
+ $jscomp.polyfill=function(a,e,b,f){if(e){b=$jscomp.global;a=a.split(".");for(f=0;f<a.length-1;f++){var h=a[f];h in b||(b[h]={});b=b[h]}a=a[a.length-1];f=b[a];e=e(f);e!=f&&null!=e&&$jscomp.defineProperty(b,a,{configurable:!0,writable:!0,value:e})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,b){return $jscomp.findInternal(this,a,b).v}},"es6","es3");
4
+ (function(){var a=[],e=0;window.generate_the_wcmp=function(b){function f(g,l){if(g+1<e||l){var d=g+1;!l||d!=e&&0!=c('[playernumber="'+d+'"]').closest("[data-loop]").length&&c('[playernumber="'+d+'"]').closest("[data-loop]")[0]==c('[playernumber="'+g+'"]').closest("[data-loop]")[0]||(d=c('[playernumber="'+g+'"]').closest("[data-loop]").find("[playernumber]:first").attr("playernumber"));a[d]instanceof c&&a[d].is("a")?a[d].is(":visible")?a[d].click():f(g+1,l):c(a[d].container).is(":visible")?a[d].play():
5
+ f(g+1,l)}}function h(g){var a=g.data("product"),d=c("img.product-"+a);d.length&&1==c('[data-product="'+a+'"]').length&&(a=d.offset(),g=g.closest("div.wcmp-player"),g.css({position:"absolute","z-index":999999}).offset({left:a.left+(d.width()-g.width())/2,top:a.top+(d.height()-g.height())/2}))}if(!("boolean"!==typeof b&&"undefined"!=typeof wcmp_global_settings&&1*wcmp_global_settings.onload)&&"undefined"===typeof generated_the_wcmp){generated_the_wcmp=!0;var c=jQuery;c(".wcmp-player-container").on("click",
6
+ "*",function(a){a.preventDefault();a.stopPropagation();return!1});c.expr[":"].regex=function(a,b,d){b=d[3].split(",");var m=/^(data|css):/;d=b[0].match(m)?b[0].split(":")[0]:"attr";m=b.shift().replace(m,"");return(new RegExp(b.join("").replace(/^\s+|\s+$/g,""),"ig")).test(c(a)[d](m))};var r="undefined"!=typeof wcmp_global_settings?wcmp_global_settings.play_all:!0,k="undefined"!=typeof wcmp_global_settings?!(1*wcmp_global_settings.play_simultaneously):!0,p="undefined"!=typeof wcmp_global_settings?
7
+ 1*wcmp_global_settings.fade_out:!0,q="undefined"!=typeof wcmp_global_settings&&"ios_controls"in wcmp_global_settings&&1*wcmp_global_settings.ios_controls?!0:!1;b=c("audio.wcmp-player:not(.track):not([playernumber])");var t=c("audio.wcmp-player.track:not([playernumber])"),n={pauseOtherPlayers:k,iPadUseNativeControls:q,iPhoneUseNativeControls:q,success:function(a,b){c(b).attr("volume")&&a.setVolume(parseFloat(c(b).attr("volume")));var d=function(a){a=c(a.target||a.detail.target);var m=a.data("duration");
8
+ "undefined"!=typeof m&&a.closest(".wcmp-player-container").find(".mejs-duration").html(m)};a.addEventListener("timeupdate",function(a){d(a);a=a.target||a.detail.target;isNaN(a.currentTime)||isNaN(a.duration)||(p&&4>a.duration-a.currentTime?a.setVolume(a.volume-a.volume/3):("undefined"==typeof a.bkVolume&&(a.bkVolume=a.volume),a.setVolume(a.bkVolume)))});a.addEventListener("volumechange",function(a){a=a.target||a.detail.target;isNaN(a.currentTime)||isNaN(a.duration)||!(4<a.duration-a.currentTime)&&
9
+ p||!a.currentTime||(a.bkVolume=a.volume)});a.addEventListener("ended",function(a){var b=a.target||a.detail.target;a=c(b).closest('[data-loop="1"]');if(1*r||a.length)b=1*c(b).attr("playernumber"),f(b,a.length)});a.addEventListener("loadedmetadata",function(a){d(a)})}};k=".product-type-grouped :regex(name,quantity\\[\\d+\\])";b.each(function(){var b=c(this);b.find("source").attr("src");b.attr("playernumber",e);n.audioVolume="vertical";try{a[e]=new MediaElementPlayer(b[0],n)}catch(l){"console"in window&&
10
+ console.log(l)}e++});t.each(function(){var b=c(this);b.find("source").attr("src");b.attr("playernumber",e);n.features=["playpause"];try{a[e]=new MediaElementPlayer(b[0],n)}catch(l){"console"in window&&console.log(l)}e++;h(b);c(window).resize(function(){h(b)})});c(k).length||(k=".product-type-grouped [data-product_id]");c(k).length||(k=".woocommerce-grouped-product-list [data-product_id]");c(k).length||(k='.woocommerce-grouped-product-list [id*="product-"]');c(k).each(function(){try{var a=c(this),
11
+ b=(a.data("product_id")||a.attr("name")||a.attr("id")).replace(/[^\d]/g,""),d=c(".wcmp-player-list.merge_in_grouped_products .product-"+b+":first .wcmp-player-title"),e=c("<table></table>");d.length&&!d.closest(".wcmp-first-in-product").length&&(d.closest("tr").addClass("wcmp-first-in-product"),0==d.closest("form").length&&d.closest(".wcmp-player-list").prependTo(a.closest("form")),e.append(a.closest("tr").prepend("<td>"+d.html()+"</td>")),d.html("").append(e))}catch(u){}})}};window.wcmp_force_init=
12
+ function(){delete window.generated_the_wcmp;generate_the_wcmp(!0)};jQuery(generate_the_wcmp);jQuery(window).on("load",function(){generate_the_wcmp(!0);var a=jQuery,e=window.navigator.userAgent;a("[data-lazyloading]").each(function(){var b=a(this);b.attr("preload",b.data("lazyloading"))});if(e.match(/iPad/i)||e.match(/iPhone/i))if("undefined"!=typeof wcmp_global_settings?wcmp_global_settings.play_all:1)a(".wcmp-player .mejs-play button").one("click",function(){if("undefined"==typeof wcmp_preprocessed_players){wcmp_preprocessed_players=
13
+ !0;var b=a(this);a(".wcmp-player audio").each(function(){this.play();this.pause()});setTimeout(function(){b.click()},500)}})}).on("popstate",function(){jQuery("audio[data-product]:not([playernumber])").length&&wcmp_force_init()});jQuery(document).on("scroll wpfAjaxSuccess woof_ajax_done yith-wcan-ajax-filtered wpf_ajax_success",wcmp_force_init)})();
js/public_src.js CHANGED
@@ -14,24 +14,37 @@
14
  generated_the_wcmp = true;
15
 
16
  var $ = jQuery;
17
- $(document).on('click', '.wcmp-player-container', function(evt){evt.preventDefault();evt.stopPropagation();});
18
 
19
  /**
20
  * Play next player
21
  */
22
- function _playNext( playernumber )
23
  {
24
- if( playernumber+1 < wcmp_player_counter )
25
  {
 
26
  var toPlay = playernumber+1;
 
 
 
 
 
 
 
 
 
 
 
 
27
  if( wcmp_players[ toPlay ] instanceof $ && wcmp_players[ toPlay ].is( 'a' ) ){
28
  if(wcmp_players[ toPlay ].is(':visible')) wcmp_players[ toPlay ].click();
29
- else _playNext(playernumber+1);
30
  }
31
  else
32
  {
33
  if($(wcmp_players[ toPlay ].container).is(':visible')) wcmp_players[ toPlay ].play();
34
- else _playNext(playernumber+1);
35
  }
36
  }
37
  };
@@ -119,11 +132,12 @@
119
  });
120
 
121
  media.addEventListener( 'ended', function( evt ){
122
- var e = evt.target || evt.detail.target;
123
- if( play_all*1 )
 
124
  {
125
  var playernumber = $(e).attr('playernumber')*1;
126
- _playNext( playernumber );
127
  }
128
  });
129
 
@@ -236,5 +250,5 @@
236
  if(jQuery('audio[data-product]:not([playernumber])').length) wcmp_force_init();
237
  });
238
 
239
- jQuery(document).on('scroll', wcmp_force_init);
240
  })()
14
  generated_the_wcmp = true;
15
 
16
  var $ = jQuery;
17
+ $('.wcmp-player-container').on('click', '*', function(evt){evt.preventDefault();evt.stopPropagation();return false;});
18
 
19
  /**
20
  * Play next player
21
  */
22
+ function _playNext( playernumber, loop )
23
  {
24
+ if( playernumber+1 < wcmp_player_counter || loop)
25
  {
26
+
27
  var toPlay = playernumber+1;
28
+ if(
29
+ loop &&
30
+ (
31
+ toPlay == wcmp_player_counter ||
32
+ $('[playernumber="'+toPlay+'"]').closest('[data-loop]').length == 0 ||
33
+ $('[playernumber="'+toPlay+'"]').closest('[data-loop]')[0] != $('[playernumber="'+playernumber+'"]').closest('[data-loop]')[0]
34
+ )
35
+ )
36
+ {
37
+ toPlay = $('[playernumber="'+playernumber+'"]').closest('[data-loop]').find('[playernumber]:first').attr('playernumber');
38
+ }
39
+
40
  if( wcmp_players[ toPlay ] instanceof $ && wcmp_players[ toPlay ].is( 'a' ) ){
41
  if(wcmp_players[ toPlay ].is(':visible')) wcmp_players[ toPlay ].click();
42
+ else _playNext(playernumber+1, loop);
43
  }
44
  else
45
  {
46
  if($(wcmp_players[ toPlay ].container).is(':visible')) wcmp_players[ toPlay ].play();
47
+ else _playNext(playernumber+1, loop);
48
  }
49
  }
50
  };
132
  });
133
 
134
  media.addEventListener( 'ended', function( evt ){
135
+ var e = evt.target || evt.detail.target,
136
+ c = $(e).closest('[data-loop="1"]');
137
+ if( play_all*1 || c.length)
138
  {
139
  var playernumber = $(e).attr('playernumber')*1;
140
+ _playNext( playernumber, c.length);
141
  }
142
  });
143
 
250
  if(jQuery('audio[data-product]:not([playernumber])').length) wcmp_force_init();
251
  });
252
 
253
+ jQuery(document).on('scroll wpfAjaxSuccess woof_ajax_done yith-wcan-ajax-filtered wpf_ajax_success', wcmp_force_init);
254
  })()
languages/music-player-for-woocommerce-en_US.mo CHANGED
Binary file
languages/music-player-for-woocommerce-en_US.po CHANGED
@@ -1,39 +1,97 @@
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: music-player-for-woocommerce\n"
4
- "POT-Creation-Date: 2021-05-14 03:15+0200\n"
5
- "PO-Revision-Date: 2021-05-14 03:15+0200\n"
6
  "Last-Translator: CodePeople\n"
7
  "Language-Team: CodePeople\n"
8
  "Language: en_US\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 2.4.3\n"
13
  "X-Poedit-Basepath: ..\n"
14
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
  "X-Poedit-KeywordsList: __;_e;esc_attr__;esc_attr_e\n"
16
  "X-Poedit-SearchPath-0: .\n"
17
 
18
- #: addons/dokan.addon.php:25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  msgid "Activate the Dokan add-on"
20
  msgstr ""
21
 
22
- #: addons/dokan.addon.php:25
23
  msgid ""
24
  "If the \"Dokan Multivendor\" plugin is installed on the website, check the "
25
  "checkbox to allow vendors to configure their music players."
26
  msgstr ""
27
 
28
- #: addons/dokan/player_options.php:9 views/player_options.php:307
 
 
 
 
 
 
 
 
29
  msgid "File Name"
30
  msgstr ""
31
 
32
- #: addons/dokan/player_options.php:10 views/player_options.php:313
33
  msgid "Choose file"
34
  msgstr ""
35
 
36
- #: addons/dokan/player_options.php:11 views/player_options.php:316
37
  msgid "Delete"
38
  msgstr ""
39
 
@@ -53,97 +111,97 @@ msgstr ""
53
  msgid "<p>The player uses the audio files associated to the product.</b></p>"
54
  msgstr ""
55
 
56
- #: addons/dokan/player_options.php:61 views/player_options.php:55
57
  msgid "[+|-] Tips"
58
  msgstr ""
59
 
60
- #: addons/dokan/player_options.php:67 views/player_options.php:61
61
  msgid "[+|-] Using the audio files stored on Google Drive"
62
  msgstr ""
63
 
64
- #: addons/dokan/player_options.php:75 views/player_options.php:69
65
  msgid ""
66
  "Go to Drive, press the right click on the file to use, and select the "
67
  "option: <b>\"Get Shareable Link\"</b>"
68
  msgstr ""
69
 
70
- #: addons/dokan/player_options.php:83 views/player_options.php:77
71
  msgid ""
72
  "The previous action will generate an url with the structure: <b>https://"
73
  "drive.google.com/open?id=FILE_ID</b>"
74
  msgstr ""
75
 
76
- #: addons/dokan/player_options.php:93 views/player_options.php:87
77
  msgid ""
78
  "Knowing the FILE_ID, extracted from the previous URL, enter the URL below, "
79
  "into the WooCommerce product, to allow the Music Player accessing to it:"
80
  msgstr ""
81
 
82
- #: addons/dokan/player_options.php:104 views/player_options.php:98
83
  msgid ""
84
  "<b>Note:</b> Pay attention to the use of the fake parameter: <b>&.mp3</b> as "
85
  "the last one in the URL"
86
  msgstr ""
87
 
88
- #: addons/dokan/player_options.php:114 views/player_options.php:108
89
  msgid "[+|-] Using the audio files stored on DropBox"
90
  msgstr ""
91
 
92
- #: addons/dokan/player_options.php:122 views/player_options.php:116
93
  msgid ""
94
  "Sign in to <a href=\"https://www.dropbox.com/login\" target=\"_blank"
95
  "\">dropbox.com </a>"
96
  msgstr ""
97
 
98
- #: addons/dokan/player_options.php:132 views/player_options.php:126
99
  msgid ""
100
  "Hover your cursor over the file or folder you'd like to share and click "
101
  "<b>Share</b> when it appears."
102
  msgstr ""
103
 
104
- #: addons/dokan/player_options.php:142 views/player_options.php:136
105
  msgid ""
106
  "If a link hasn't been created, click Create a link. (If a link was already "
107
  "created, click Copy link."
108
  msgstr ""
109
 
110
- #: addons/dokan/player_options.php:150 views/player_options.php:144
111
  msgid ""
112
  "The link structure would be similar to:<br> https://www.dropbox.com/s/"
113
  "rycvgn8iokfedmo/file.mp3?dl=0"
114
  msgstr ""
115
 
116
- #: addons/dokan/player_options.php:160 views/player_options.php:154
117
  msgid ""
118
  "Enter the URL into the WooCommerce product with the following structure:<br> "
119
  "https://www.dropbox.com/s/rycvgn8iokfedmo/file.mp3?dl=1&.mp3"
120
  msgstr ""
121
 
122
- #: addons/dokan/player_options.php:168 views/player_options.php:162
123
  msgid ""
124
  "<b>Note:</b> Pay attention to the use of the fake parameter: <b>&.mp3</b> as "
125
  "the last one in the URL. Furthermore, the parameter <b>dl=0</b>, has been "
126
  "modified as <b>dl=1</b>"
127
  msgstr ""
128
 
129
- #: addons/dokan/player_options.php:181 views/global_options.php:239
130
- #: views/player_options.php:179
131
  msgid "Enable player"
132
  msgstr ""
133
 
134
- #: addons/dokan/player_options.php:181 views/global_options.php:239
135
  msgid ""
136
  "The player is shown only if the product is \"downloadable\" with at least an "
137
  "audio file between the \"Downloadable files\", or you have selected your own "
138
  "audio files"
139
  msgstr ""
140
 
141
- #: addons/dokan/player_options.php:181 views/player_options.php:178
142
  msgid "Include music player"
143
  msgstr ""
144
 
145
- #: addons/dokan/player_options.php:185 views/global_options.php:242
146
- #: views/player_options.php:182
147
  msgid "Include in"
148
  msgstr ""
149
 
@@ -151,17 +209,17 @@ msgstr ""
151
  msgid "Include on products pages only"
152
  msgstr ""
153
 
154
- #: addons/dokan/player_options.php:188 views/global_options.php:245
155
- #: views/player_options.php:185
156
  msgid "single-entry pages <i>(Product's page only)</i>"
157
  msgstr ""
158
 
159
- #: addons/dokan/player_options.php:190 views/player_options.php:187
160
  msgid "Include on multiple-entry pages"
161
  msgstr ""
162
 
163
- #: addons/dokan/player_options.php:191 views/global_options.php:248
164
- #: views/player_options.php:188
165
  msgid ""
166
  "multiple entries pages <i>(Shop pages, archive pages, but not in the "
167
  "product's page)</i>"
@@ -171,104 +229,104 @@ msgstr ""
171
  msgid "Include on products and multiple-entry pages"
172
  msgstr ""
173
 
174
- #: addons/dokan/player_options.php:194 views/global_options.php:251
175
- #: views/player_options.php:191
176
  msgid "all pages <i>(with single or multiple-entries)</i>"
177
  msgstr ""
178
 
179
  #: addons/dokan/player_options.php:198 addons/dokan/player_options.php:199
180
- #: views/global_options.php:261 views/global_options.php:262
181
- #: views/player_options.php:195 views/player_options.php:196
182
  msgid "Merge in grouped products"
183
  msgstr ""
184
 
185
- #: addons/dokan/player_options.php:200 views/global_options.php:262
186
- #: views/player_options.php:196
187
  msgid ""
188
  "In grouped products, display the \"Add to cart\" buttons and quantity fields "
189
  "in the players rows"
190
  msgstr ""
191
 
192
- #: addons/dokan/player_options.php:203 views/global_options.php:265
193
- #: views/player_options.php:199 widgets/playlist_widget.php:75
194
  msgid "Player layout"
195
  msgstr ""
196
 
197
- #: addons/dokan/player_options.php:206 views/global_options.php:269
198
- #: views/global_options.php:270 views/player_options.php:203
199
- #: views/player_options.php:204
200
  msgid "Skin 1"
201
  msgstr ""
202
 
203
- #: addons/dokan/player_options.php:211 views/global_options.php:275
204
- #: views/player_options.php:208 views/player_options.php:209
205
  msgid "Skin 2"
206
  msgstr ""
207
 
208
- #: addons/dokan/player_options.php:216 views/global_options.php:279
209
- #: views/global_options.php:280 views/player_options.php:213
210
- #: views/player_options.php:214
211
  msgid "Skin 3"
212
  msgstr ""
213
 
214
- #: addons/dokan/player_options.php:222 views/global_options.php:287
215
- #: views/player_options.php:221 widgets/playlist_widget.php:91
216
  msgid "Preload"
217
  msgstr ""
218
 
219
- #: addons/dokan/player_options.php:224 views/global_options.php:290
220
- #: views/player_options.php:224
221
  msgid "Preload - none"
222
  msgstr ""
223
 
224
- #: addons/dokan/player_options.php:225 views/global_options.php:291
225
- #: views/player_options.php:225
226
  msgid "Preload - metadata"
227
  msgstr ""
228
 
229
- #: addons/dokan/player_options.php:226 views/global_options.php:292
230
- #: views/player_options.php:226
231
  msgid "Preload - auto"
232
  msgstr ""
233
 
234
- #: addons/dokan/player_options.php:230 views/global_options.php:297
235
- #: views/global_options.php:300 views/player_options.php:231
236
- #: views/player_options.php:234 widgets/playlist_widget.php:87
237
  msgid "Play all"
238
  msgstr ""
239
 
240
- #: addons/dokan/player_options.php:233 views/global_options.php:321
241
- #: views/player_options.php:244
242
  msgid "Player controls"
243
  msgstr ""
244
 
245
- #: addons/dokan/player_options.php:235 views/global_options.php:323
246
- #: views/player_options.php:246
247
  msgid "Play/pause button"
248
  msgstr ""
249
 
250
- #: addons/dokan/player_options.php:235 views/global_options.php:323
251
- #: views/player_options.php:246
252
  msgid "the play/pause button only"
253
  msgstr ""
254
 
255
- #: addons/dokan/player_options.php:236 views/global_options.php:324
256
- #: views/player_options.php:247
257
  msgid "All controls"
258
  msgstr ""
259
 
260
- #: addons/dokan/player_options.php:236 views/global_options.php:324
261
- #: views/player_options.php:247
262
  msgid "all controls"
263
  msgstr ""
264
 
265
- #: addons/dokan/player_options.php:237 views/global_options.php:325
266
- #: views/player_options.php:248
267
  msgid "Depending on context"
268
  msgstr ""
269
 
270
- #: addons/dokan/player_options.php:237 views/global_options.php:325
271
- #: views/player_options.php:248
272
  msgid "the play/pause button only, or all controls depending on context"
273
  msgstr ""
274
 
@@ -276,20 +334,20 @@ msgstr ""
276
  msgid "Player on cover"
277
  msgstr ""
278
 
279
- #: addons/dokan/player_options.php:241 views/global_options.php:330
280
- #: views/player_options.php:253
281
  msgid "for play/pause button players display them on cover images."
282
  msgstr ""
283
 
284
- #: addons/dokan/player_options.php:242 views/global_options.php:333
285
- #: views/player_options.php:256
286
  msgid ""
287
  "(This feature is experimental, and will depend on the theme active on the "
288
  "website.)"
289
  msgstr ""
290
 
291
- #: addons/dokan/player_options.php:247 views/global_options.php:340
292
- #: views/player_options.php:263
293
  msgid "Display the player's title"
294
  msgstr ""
295
 
@@ -297,29 +355,29 @@ msgstr ""
297
  msgid "Display player title"
298
  msgstr ""
299
 
300
- #: addons/wcfm.addon.php:25
301
  msgid "Activate the WCFM add-on"
302
  msgstr ""
303
 
304
- #: addons/wcfm.addon.php:25
305
  msgid ""
306
  "If the \"WCFM - Marketplace\" plugin is installed on the website, check the "
307
  "checkbox to allow vendors to configure their music players."
308
  msgstr ""
309
 
310
- #: addons/wcfm.addon.php:39 addons/wcv.addon.php:39
311
  msgid "Music Player"
312
  msgstr ""
313
 
314
- #: addons/wcv.addon.php:25
315
  msgid "Activate the WC Vendors add-on"
316
  msgstr ""
317
 
318
- #: addons/wcv.addon.php:25
319
  msgid "Activate the WC Vendors add-on (Experimental add-on)"
320
  msgstr ""
321
 
322
- #: addons/wcv.addon.php:25
323
  msgid ""
324
  "If the \"WC Vendors\" plugin is installed on the website, check the checkbox "
325
  "to allow vendors to configure their music players."
@@ -382,11 +440,11 @@ msgstr ""
382
  msgid "Insert a playlist with the products players"
383
  msgstr ""
384
 
385
- #: views/global_options.php:39
386
  msgid "Music Player for WooCommerce - Global Settings"
387
  msgstr ""
388
 
389
- #: views/global_options.php:43
390
  msgid ""
391
  "For reporting any issue or to request a customization, <a href=\"https://"
392
  "wordpress.dwbooster.com/contact-us\" target=\"_blank\">CLICK HERE</a><br />\n"
@@ -398,23 +456,23 @@ msgid ""
398
  "target=\"_blank\">Public page: Click to visit the WooCommerce Store</a>"
399
  msgstr ""
400
 
401
- #: views/global_options.php:52
402
  msgid "Registering of Plugin"
403
  msgstr ""
404
 
405
- #: views/global_options.php:54
406
  msgid "Enter the email address of buyer"
407
  msgstr ""
408
 
409
- #: views/global_options.php:55
410
  msgid "Buyer email"
411
  msgstr ""
412
 
413
- #: views/global_options.php:55
414
  msgid "Register"
415
  msgstr ""
416
 
417
- #: views/global_options.php:67 views/player_options.php:45
418
  msgid ""
419
  "<p>The player uses the audio files associated to the product. If you want "
420
  "protecting the audio files for selling, tick the checkbox: <b>\"Protect the "
@@ -426,151 +484,163 @@ msgid ""
426
  "pay for them.</b></p>"
427
  msgstr ""
428
 
429
- #: views/global_options.php:78
430
  msgid "General Settings"
431
  msgstr ""
432
 
433
- #: views/global_options.php:81 views/global_options.php:82
434
  msgid "Include the players only for registered users"
435
  msgstr ""
436
 
437
- #: views/global_options.php:85 views/global_options.php:86
438
  msgid "Apply fade out to playing audio when possible"
439
  msgstr ""
440
 
441
- #: views/global_options.php:89
442
  msgid "The general settings affect only the PRO version of the plugin"
443
  msgstr ""
444
 
445
- #: views/global_options.php:89 views/global_options.php:346
446
- #: views/player_options.php:49 views/player_options.php:269
447
  msgid "CLICK HERE TO GET THE PRO VERSION OF THE PLUGIN"
448
  msgstr ""
449
 
450
- #: views/global_options.php:92 views/global_options.php:93
451
  msgid ""
452
- "For buyers, play the purchased audio files instead the truncated files for "
453
- "demo"
454
  msgstr ""
455
 
456
- #: views/global_options.php:99 views/global_options.php:100
 
 
 
 
 
 
 
 
 
 
 
 
457
  msgid "Truncate the audio files for demo with ffmpeg"
458
  msgstr ""
459
 
460
- #: views/global_options.php:103 views/global_options.php:104
461
  msgid "ffmpeg path"
462
  msgstr ""
463
 
464
- #: views/global_options.php:107 views/global_options.php:109
465
  msgid "Watermark audio"
466
  msgstr ""
467
 
468
- #: views/global_options.php:109
469
  msgid "Select"
470
  msgstr ""
471
 
472
- #: views/global_options.php:110
473
  msgid ""
474
  "Select an audio file if you want to apply a watermark to the audio files for "
475
  "demos. The watermark will be applied to the protected demos (Experimental "
476
  "feature)."
477
  msgstr ""
478
 
479
- #: views/global_options.php:117 views/global_options.php:118
480
  msgid "Delete the demo files generated previously"
481
  msgstr ""
482
 
483
- #: views/global_options.php:124 views/global_options.php:125
484
  msgid "Store demo files on Google Drive"
485
  msgstr ""
486
 
487
- #: views/global_options.php:128
488
  msgid "Import a JSON Key file"
489
  msgstr ""
490
 
491
- #: views/global_options.php:130
492
  msgid "JSON Key file"
493
  msgstr ""
494
 
495
- #: views/global_options.php:174
496
  msgid "Troubleshoot Area"
497
  msgstr ""
498
 
499
- #: views/global_options.php:178 views/global_options.php:181
500
  msgid "On iPads and iPhones, use native controls"
501
  msgstr ""
502
 
503
- #: views/global_options.php:182
504
  msgid ""
505
  "tick the checkbox if the players do not work properly on iPads or iPhones"
506
  msgstr ""
507
 
508
- #: views/global_options.php:187
509
  msgid "Loading players in the onload event"
510
  msgstr ""
511
 
512
- #: views/global_options.php:190
513
  msgid "Loading placeholder in the onload event"
514
  msgstr ""
515
 
516
- #: views/global_options.php:191
517
  msgid "tick the checkbox if the players are not being loaded properly"
518
  msgstr ""
519
 
520
- #: views/global_options.php:196
521
  msgid "For files whose extensions cannot be determined"
522
  msgstr ""
523
 
524
- #: views/global_options.php:199
525
  msgid ""
526
  "For files whose extensions cannot be determined, handle them as mp3 files"
527
  msgstr ""
528
 
529
- #: views/global_options.php:200
530
  msgid "handle them as mp3 files"
531
  msgstr ""
532
 
533
- #: views/global_options.php:205 views/global_options.php:208
534
  msgid ""
535
  "For the WooCommerce Gutenberg Blocks, include the main player in the "
536
  "products titles"
537
  msgstr ""
538
 
539
- #: views/global_options.php:209
540
  msgid "Includes the main player in front of products titles"
541
  msgstr ""
542
 
543
- #: views/global_options.php:214 views/global_options.php:217
544
  msgid "WooCommerce hook used to display the players in the shop pages"
545
  msgstr ""
546
 
547
- #: views/global_options.php:218
548
  msgid ""
549
  "The plugin uses by default the <b>woocommerce_shop_loop_item_title</b> hook. "
550
  "If the player is not being displayed, enter the hook used by the theme "
551
  "active on your website."
552
  msgstr ""
553
 
554
- #: views/global_options.php:219
555
  msgid "Force the player in the title"
556
  msgstr ""
557
 
558
- #: views/global_options.php:219
559
  msgid "Forces the audio player to be displayed in the product title."
560
  msgstr ""
561
 
562
- #: views/global_options.php:224 views/global_options.php:227
563
  msgid "WooCommerce hook used to display the players in the products pages"
564
  msgstr ""
565
 
566
- #: views/global_options.php:228
567
  msgid ""
568
  "The plugin uses by default the <b>woocommerce_single_product_summary</b> "
569
  "hook. If the player is not being displayed, enter the hook used by the theme "
570
  "active on your website."
571
  msgstr ""
572
 
573
- #: views/global_options.php:233
574
  msgid ""
575
  "Click on the <a href=\"https://docs.woocommerce.com/wc-apidocs/hook-docs.html"
576
  "\" target=\"_blank\">THIS LINK</a> for the list of available <a href="
@@ -578,146 +648,146 @@ msgid ""
578
  "style=\"font-weight:bold;font-size:1.3em;\">WooCommerce Hooks</a>"
579
  msgstr ""
580
 
581
- #: views/global_options.php:238
582
  msgid "Include music player in all products"
583
  msgstr ""
584
 
585
- #: views/global_options.php:244
586
  msgid "Products pages only"
587
  msgstr ""
588
 
589
- #: views/global_options.php:247
590
  msgid "Multiple-entry pages"
591
  msgstr ""
592
 
593
- #: views/global_options.php:250
594
  msgid "Product and multiple-entry pages"
595
  msgstr ""
596
 
597
- #: views/global_options.php:255 views/global_options.php:257
598
  msgid "Include players in cart"
599
  msgstr ""
600
 
601
- #: views/global_options.php:274
602
  msgid "skin 2"
603
  msgstr ""
604
 
605
- #: views/global_options.php:305 views/global_options.php:308
606
  msgid "Allow multiple players to play simultaneously"
607
  msgstr ""
608
 
609
- #: views/global_options.php:310
610
  msgid ""
611
  "By default, only one player would be playing at once. By pressing the play "
612
  "button of a player, the other players would stop. By ticking the checkbox, "
613
  "multiple players could play simultaneously."
614
  msgstr ""
615
 
616
- #: views/global_options.php:315 views/player_options.php:238
617
  msgid "Player volume (from 0 to 1)"
618
  msgstr ""
619
 
620
- #: views/global_options.php:317 views/player_options.php:240
621
  msgid "Player volume"
622
  msgstr ""
623
 
624
- #: views/global_options.php:327 views/player_options.php:250
625
  msgid "On cover"
626
  msgstr ""
627
 
628
- #: views/global_options.php:342 views/player_options.php:265
629
  msgid "Display the player title"
630
  msgstr ""
631
 
632
- #: views/global_options.php:346 views/player_options.php:269
633
  msgid "The security feature is only available in the PRO version of the plugin"
634
  msgstr ""
635
 
636
- #: views/global_options.php:349 views/global_options.php:350
637
- #: views/player_options.php:272 views/player_options.php:273
638
  msgid "Protect the file"
639
  msgstr ""
640
 
641
- #: views/global_options.php:353 views/global_options.php:355
642
- #: views/player_options.php:276 views/player_options.php:278
643
  msgid "Percent of audio used for protected playbacks"
644
  msgstr ""
645
 
646
- #: views/global_options.php:356 views/player_options.php:279
647
  msgid ""
648
  "To prevent unauthorized copying of audio files, the files will be partially "
649
  "accessible"
650
  msgstr ""
651
 
652
- #: views/global_options.php:361
653
  msgid ""
654
  "Text to display beside the player explaining that demos are partial versions "
655
  "of the original files"
656
  msgstr ""
657
 
658
- #: views/global_options.php:363
659
  msgid "Explaining that demos are partial versions of the original files"
660
  msgstr ""
661
 
662
- #: views/global_options.php:377
663
  msgid "Scope"
664
  msgstr ""
665
 
666
- #: views/global_options.php:378
667
  msgid ""
668
  "Ticking the checkbox the previous settings are applied to all products, even "
669
  "if they have a player enabled."
670
  msgstr ""
671
 
672
- #: views/global_options.php:378
673
  msgid "Apply the previous settings to all products"
674
  msgstr ""
675
 
676
- #: views/global_options.php:378
677
  msgid "Apply the previous settings to all products pages in the website."
678
  msgstr ""
679
 
680
- #: views/global_options.php:390
681
  msgid "Analytics"
682
  msgstr ""
683
 
684
- #: views/global_options.php:394
685
  msgid ""
686
  "Allows the integration with Google Analytics for registering new events when "
687
  "the songs are played. The event information would include: the URL to the "
688
  "audio file as the event label and the product's id as its value."
689
  msgstr ""
690
 
691
- #: views/global_options.php:395
692
  msgid "Note"
693
  msgstr ""
694
 
695
- #: views/global_options.php:395
696
  msgid ""
697
  "If the preload option is configured as Metadata or Auto in the players "
698
  "settings, the event would be registered when the audio file is loaded by the "
699
  "player and not exactly when they are playing."
700
  msgstr ""
701
 
702
- #: views/global_options.php:400 views/global_options.php:401
703
  msgid "Tracking Id"
704
  msgstr ""
705
 
706
- #: views/global_options.php:413
707
  msgid "Add ons"
708
  msgstr ""
709
 
710
- #: views/global_options.php:420
711
  msgid "Save settings"
712
  msgstr ""
713
 
714
- #: views/player_options.php:49
715
  msgid ""
716
  "The security feature and particular files for demo are only available in the "
717
  "PRO version of the plugin"
718
  msgstr ""
719
 
720
- #: views/player_options.php:50
721
  msgid ""
722
  "For testing the premium version of the plugin, visit the online demo:<br/> "
723
  "<a href=\"https://demos.dwbooster.com/music-player-for-woocommerce/wp-login."
@@ -727,45 +797,45 @@ msgid ""
727
  "WooCommerce Store</a>"
728
  msgstr ""
729
 
730
- #: views/player_options.php:179
731
  msgid ""
732
  "The player is shown only if the product is \"downloadable\", and there is at "
733
  "least an audio file between the \"Downloadable files\""
734
  msgstr ""
735
 
736
- #: views/player_options.php:184
737
  msgid "Include on products pages"
738
  msgstr ""
739
 
740
- #: views/player_options.php:190
741
  msgid "Include on product and multiple-entry pages"
742
  msgstr ""
743
 
744
- #: views/player_options.php:291
745
  msgid "Own demo files"
746
  msgstr ""
747
 
748
- #: views/player_options.php:291
749
  msgid "Select my own demo files"
750
  msgstr ""
751
 
752
- #: views/player_options.php:295
753
  msgid "Demo files"
754
  msgstr ""
755
 
756
- #: views/player_options.php:299
757
  msgid "Name"
758
  msgstr ""
759
 
760
- #: views/player_options.php:300 views/player_options.php:310
761
  msgid "File URL"
762
  msgstr ""
763
 
764
- #: views/player_options.php:307
765
  msgid "File name"
766
  msgstr ""
767
 
768
- #: views/player_options.php:323
769
  msgid "Add File"
770
  msgstr ""
771
 
@@ -773,7 +843,7 @@ msgstr ""
773
  msgid "Help"
774
  msgstr ""
775
 
776
- #: wcmp.php:1011
777
  msgid "There are no products that satisfy the block's settings"
778
  msgstr ""
779
 
1
  msgid ""
2
  msgstr ""
3
  "Project-Id-Version: music-player-for-woocommerce\n"
4
+ "POT-Creation-Date: 2021-08-13 17:03+0200\n"
5
+ "PO-Revision-Date: 2021-08-13 17:03+0200\n"
6
  "Last-Translator: CodePeople\n"
7
  "Language-Team: CodePeople\n"
8
  "Language: en_US\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 3.0\n"
13
  "X-Poedit-Basepath: ..\n"
14
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
  "X-Poedit-KeywordsList: __;_e;esc_attr__;esc_attr_e\n"
16
  "X-Poedit-SearchPath-0: .\n"
17
 
18
+ #: addons/ap-compact-audio-player.addon.php:32
19
+ msgid "Use Compact Audio Player instead of the current plugin players"
20
+ msgstr ""
21
+
22
+ #: addons/ap-compact-audio-player.addon.php:32
23
+ msgid "Use \"Compact Audio Player\" instead of the current plugin players"
24
+ msgstr ""
25
+
26
+ #: addons/ap-compact-audio-player.addon.php:34
27
+ #: addons/ap-cp-media-player.addon.php:75
28
+ #: addons/ap-html5-audio-player.addon.php:36
29
+ msgid ""
30
+ "The player functions configured above do not apply, except for audio "
31
+ "protection if applicable.<br>This player <b>will take precedence</b> over "
32
+ "the player configured in the products' settings."
33
+ msgstr ""
34
+
35
+ #: addons/ap-compact-audio-player.addon.php:35
36
+ msgid ""
37
+ "The \"Compact WP Audio Player\" plugin is not installed on your WordPress."
38
+ msgstr ""
39
+
40
+ #: addons/ap-cp-media-player.addon.php:71
41
+ msgid "Use CP Media Player instead of the current plugin players"
42
+ msgstr ""
43
+
44
+ #: addons/ap-cp-media-player.addon.php:71
45
+ msgid "Use \"CP Media Player\" instead of the current plugin players"
46
+ msgstr ""
47
+
48
+ #: addons/ap-cp-media-player.addon.php:72
49
+ msgid "Select player skin"
50
+ msgstr ""
51
+
52
+ #: addons/ap-cp-media-player.addon.php:76
53
+ msgid "The \"CP Media Player\" plugin is not installed on your WordPress."
54
+ msgstr ""
55
+
56
+ #: addons/ap-html5-audio-player.addon.php:34
57
+ msgid "Use HTML5 Audio Player instead of the current plugin players"
58
+ msgstr ""
59
+
60
+ #: addons/ap-html5-audio-player.addon.php:34
61
+ msgid "Use \"HTML5 Audio Player\" instead of the current plugin players"
62
+ msgstr ""
63
+
64
+ #: addons/ap-html5-audio-player.addon.php:37
65
+ msgid "The \"HTML5 Audio Player\" plugin is not installed on your WordPress."
66
+ msgstr ""
67
+
68
+ #: addons/dokan.addon.php:26
69
  msgid "Activate the Dokan add-on"
70
  msgstr ""
71
 
72
+ #: addons/dokan.addon.php:26
73
  msgid ""
74
  "If the \"Dokan Multivendor\" plugin is installed on the website, check the "
75
  "checkbox to allow vendors to configure their music players."
76
  msgstr ""
77
 
78
+ #: addons/dokan.addon.php:27 addons/wcfm.addon.php:27 addons/wcv.addon.php:37
79
+ msgid "Hide settings"
80
+ msgstr ""
81
+
82
+ #: addons/dokan.addon.php:27 addons/wcfm.addon.php:27 addons/wcv.addon.php:37
83
+ msgid "Hides the players settings from vendors interface."
84
+ msgstr ""
85
+
86
+ #: addons/dokan/player_options.php:9 views/player_options.php:309
87
  msgid "File Name"
88
  msgstr ""
89
 
90
+ #: addons/dokan/player_options.php:10 views/player_options.php:315
91
  msgid "Choose file"
92
  msgstr ""
93
 
94
+ #: addons/dokan/player_options.php:11 views/player_options.php:318
95
  msgid "Delete"
96
  msgstr ""
97
 
111
  msgid "<p>The player uses the audio files associated to the product.</b></p>"
112
  msgstr ""
113
 
114
+ #: addons/dokan/player_options.php:61 views/player_options.php:57
115
  msgid "[+|-] Tips"
116
  msgstr ""
117
 
118
+ #: addons/dokan/player_options.php:67 views/player_options.php:63
119
  msgid "[+|-] Using the audio files stored on Google Drive"
120
  msgstr ""
121
 
122
+ #: addons/dokan/player_options.php:75 views/player_options.php:71
123
  msgid ""
124
  "Go to Drive, press the right click on the file to use, and select the "
125
  "option: <b>\"Get Shareable Link\"</b>"
126
  msgstr ""
127
 
128
+ #: addons/dokan/player_options.php:83 views/player_options.php:79
129
  msgid ""
130
  "The previous action will generate an url with the structure: <b>https://"
131
  "drive.google.com/open?id=FILE_ID</b>"
132
  msgstr ""
133
 
134
+ #: addons/dokan/player_options.php:93 views/player_options.php:89
135
  msgid ""
136
  "Knowing the FILE_ID, extracted from the previous URL, enter the URL below, "
137
  "into the WooCommerce product, to allow the Music Player accessing to it:"
138
  msgstr ""
139
 
140
+ #: addons/dokan/player_options.php:104 views/player_options.php:100
141
  msgid ""
142
  "<b>Note:</b> Pay attention to the use of the fake parameter: <b>&.mp3</b> as "
143
  "the last one in the URL"
144
  msgstr ""
145
 
146
+ #: addons/dokan/player_options.php:114 views/player_options.php:110
147
  msgid "[+|-] Using the audio files stored on DropBox"
148
  msgstr ""
149
 
150
+ #: addons/dokan/player_options.php:122 views/player_options.php:118
151
  msgid ""
152
  "Sign in to <a href=\"https://www.dropbox.com/login\" target=\"_blank"
153
  "\">dropbox.com </a>"
154
  msgstr ""
155
 
156
+ #: addons/dokan/player_options.php:132 views/player_options.php:128
157
  msgid ""
158
  "Hover your cursor over the file or folder you'd like to share and click "
159
  "<b>Share</b> when it appears."
160
  msgstr ""
161
 
162
+ #: addons/dokan/player_options.php:142 views/player_options.php:138
163
  msgid ""
164
  "If a link hasn't been created, click Create a link. (If a link was already "
165
  "created, click Copy link."
166
  msgstr ""
167
 
168
+ #: addons/dokan/player_options.php:150 views/player_options.php:146
169
  msgid ""
170
  "The link structure would be similar to:<br> https://www.dropbox.com/s/"
171
  "rycvgn8iokfedmo/file.mp3?dl=0"
172
  msgstr ""
173
 
174
+ #: addons/dokan/player_options.php:160 views/player_options.php:156
175
  msgid ""
176
  "Enter the URL into the WooCommerce product with the following structure:<br> "
177
  "https://www.dropbox.com/s/rycvgn8iokfedmo/file.mp3?dl=1&.mp3"
178
  msgstr ""
179
 
180
+ #: addons/dokan/player_options.php:168 views/player_options.php:164
181
  msgid ""
182
  "<b>Note:</b> Pay attention to the use of the fake parameter: <b>&.mp3</b> as "
183
  "the last one in the URL. Furthermore, the parameter <b>dl=0</b>, has been "
184
  "modified as <b>dl=1</b>"
185
  msgstr ""
186
 
187
+ #: addons/dokan/player_options.php:181 views/global_options.php:246
188
+ #: views/player_options.php:181
189
  msgid "Enable player"
190
  msgstr ""
191
 
192
+ #: addons/dokan/player_options.php:181 views/global_options.php:246
193
  msgid ""
194
  "The player is shown only if the product is \"downloadable\" with at least an "
195
  "audio file between the \"Downloadable files\", or you have selected your own "
196
  "audio files"
197
  msgstr ""
198
 
199
+ #: addons/dokan/player_options.php:181 views/player_options.php:180
200
  msgid "Include music player"
201
  msgstr ""
202
 
203
+ #: addons/dokan/player_options.php:185 views/global_options.php:249
204
+ #: views/player_options.php:184
205
  msgid "Include in"
206
  msgstr ""
207
 
209
  msgid "Include on products pages only"
210
  msgstr ""
211
 
212
+ #: addons/dokan/player_options.php:188 views/global_options.php:252
213
+ #: views/player_options.php:187
214
  msgid "single-entry pages <i>(Product's page only)</i>"
215
  msgstr ""
216
 
217
+ #: addons/dokan/player_options.php:190 views/player_options.php:189
218
  msgid "Include on multiple-entry pages"
219
  msgstr ""
220
 
221
+ #: addons/dokan/player_options.php:191 views/global_options.php:255
222
+ #: views/player_options.php:190
223
  msgid ""
224
  "multiple entries pages <i>(Shop pages, archive pages, but not in the "
225
  "product's page)</i>"
229
  msgid "Include on products and multiple-entry pages"
230
  msgstr ""
231
 
232
+ #: addons/dokan/player_options.php:194 views/global_options.php:258
233
+ #: views/player_options.php:193
234
  msgid "all pages <i>(with single or multiple-entries)</i>"
235
  msgstr ""
236
 
237
  #: addons/dokan/player_options.php:198 addons/dokan/player_options.php:199
238
+ #: views/global_options.php:268 views/global_options.php:269
239
+ #: views/player_options.php:197 views/player_options.php:198
240
  msgid "Merge in grouped products"
241
  msgstr ""
242
 
243
+ #: addons/dokan/player_options.php:200 views/global_options.php:269
244
+ #: views/player_options.php:198
245
  msgid ""
246
  "In grouped products, display the \"Add to cart\" buttons and quantity fields "
247
  "in the players rows"
248
  msgstr ""
249
 
250
+ #: addons/dokan/player_options.php:203 views/global_options.php:272
251
+ #: views/player_options.php:201 widgets/playlist_widget.php:75
252
  msgid "Player layout"
253
  msgstr ""
254
 
255
+ #: addons/dokan/player_options.php:206 views/global_options.php:276
256
+ #: views/global_options.php:277 views/player_options.php:205
257
+ #: views/player_options.php:206
258
  msgid "Skin 1"
259
  msgstr ""
260
 
261
+ #: addons/dokan/player_options.php:211 views/global_options.php:282
262
+ #: views/player_options.php:210 views/player_options.php:211
263
  msgid "Skin 2"
264
  msgstr ""
265
 
266
+ #: addons/dokan/player_options.php:216 views/global_options.php:286
267
+ #: views/global_options.php:287 views/player_options.php:215
268
+ #: views/player_options.php:216
269
  msgid "Skin 3"
270
  msgstr ""
271
 
272
+ #: addons/dokan/player_options.php:222 views/global_options.php:294
273
+ #: views/player_options.php:223 widgets/playlist_widget.php:91
274
  msgid "Preload"
275
  msgstr ""
276
 
277
+ #: addons/dokan/player_options.php:224 views/global_options.php:297
278
+ #: views/player_options.php:226
279
  msgid "Preload - none"
280
  msgstr ""
281
 
282
+ #: addons/dokan/player_options.php:225 views/global_options.php:298
283
+ #: views/player_options.php:227
284
  msgid "Preload - metadata"
285
  msgstr ""
286
 
287
+ #: addons/dokan/player_options.php:226 views/global_options.php:299
288
+ #: views/player_options.php:228
289
  msgid "Preload - auto"
290
  msgstr ""
291
 
292
+ #: addons/dokan/player_options.php:230 views/global_options.php:304
293
+ #: views/global_options.php:307 views/player_options.php:233
294
+ #: views/player_options.php:236 widgets/playlist_widget.php:87
295
  msgid "Play all"
296
  msgstr ""
297
 
298
+ #: addons/dokan/player_options.php:233 views/global_options.php:328
299
+ #: views/player_options.php:246
300
  msgid "Player controls"
301
  msgstr ""
302
 
303
+ #: addons/dokan/player_options.php:235 views/global_options.php:330
304
+ #: views/player_options.php:248
305
  msgid "Play/pause button"
306
  msgstr ""
307
 
308
+ #: addons/dokan/player_options.php:235 views/global_options.php:330
309
+ #: views/player_options.php:248
310
  msgid "the play/pause button only"
311
  msgstr ""
312
 
313
+ #: addons/dokan/player_options.php:236 views/global_options.php:331
314
+ #: views/player_options.php:249
315
  msgid "All controls"
316
  msgstr ""
317
 
318
+ #: addons/dokan/player_options.php:236 views/global_options.php:331
319
+ #: views/player_options.php:249
320
  msgid "all controls"
321
  msgstr ""
322
 
323
+ #: addons/dokan/player_options.php:237 views/global_options.php:332
324
+ #: views/player_options.php:250
325
  msgid "Depending on context"
326
  msgstr ""
327
 
328
+ #: addons/dokan/player_options.php:237 views/global_options.php:332
329
+ #: views/player_options.php:250
330
  msgid "the play/pause button only, or all controls depending on context"
331
  msgstr ""
332
 
334
  msgid "Player on cover"
335
  msgstr ""
336
 
337
+ #: addons/dokan/player_options.php:241 views/global_options.php:337
338
+ #: views/player_options.php:255
339
  msgid "for play/pause button players display them on cover images."
340
  msgstr ""
341
 
342
+ #: addons/dokan/player_options.php:242 views/global_options.php:340
343
+ #: views/player_options.php:258
344
  msgid ""
345
  "(This feature is experimental, and will depend on the theme active on the "
346
  "website.)"
347
  msgstr ""
348
 
349
+ #: addons/dokan/player_options.php:247 views/global_options.php:347
350
+ #: views/player_options.php:265
351
  msgid "Display the player's title"
352
  msgstr ""
353
 
355
  msgid "Display player title"
356
  msgstr ""
357
 
358
+ #: addons/wcfm.addon.php:26
359
  msgid "Activate the WCFM add-on"
360
  msgstr ""
361
 
362
+ #: addons/wcfm.addon.php:26
363
  msgid ""
364
  "If the \"WCFM - Marketplace\" plugin is installed on the website, check the "
365
  "checkbox to allow vendors to configure their music players."
366
  msgstr ""
367
 
368
+ #: addons/wcfm.addon.php:45
369
  msgid "Music Player"
370
  msgstr ""
371
 
372
+ #: addons/wcv.addon.php:36
373
  msgid "Activate the WC Vendors add-on"
374
  msgstr ""
375
 
376
+ #: addons/wcv.addon.php:36
377
  msgid "Activate the WC Vendors add-on (Experimental add-on)"
378
  msgstr ""
379
 
380
+ #: addons/wcv.addon.php:36
381
  msgid ""
382
  "If the \"WC Vendors\" plugin is installed on the website, check the checkbox "
383
  "to allow vendors to configure their music players."
440
  msgid "Insert a playlist with the products players"
441
  msgstr ""
442
 
443
+ #: views/global_options.php:40
444
  msgid "Music Player for WooCommerce - Global Settings"
445
  msgstr ""
446
 
447
+ #: views/global_options.php:44
448
  msgid ""
449
  "For reporting any issue or to request a customization, <a href=\"https://"
450
  "wordpress.dwbooster.com/contact-us\" target=\"_blank\">CLICK HERE</a><br />\n"
456
  "target=\"_blank\">Public page: Click to visit the WooCommerce Store</a>"
457
  msgstr ""
458
 
459
+ #: views/global_options.php:53
460
  msgid "Registering of Plugin"
461
  msgstr ""
462
 
463
+ #: views/global_options.php:55
464
  msgid "Enter the email address of buyer"
465
  msgstr ""
466
 
467
+ #: views/global_options.php:56
468
  msgid "Buyer email"
469
  msgstr ""
470
 
471
+ #: views/global_options.php:56
472
  msgid "Register"
473
  msgstr ""
474
 
475
+ #: views/global_options.php:68 views/player_options.php:46
476
  msgid ""
477
  "<p>The player uses the audio files associated to the product. If you want "
478
  "protecting the audio files for selling, tick the checkbox: <b>\"Protect the "
484
  "pay for them.</b></p>"
485
  msgstr ""
486
 
487
+ #: views/global_options.php:79
488
  msgid "General Settings"
489
  msgstr ""
490
 
491
+ #: views/global_options.php:82 views/global_options.php:83
492
  msgid "Include the players only for registered users"
493
  msgstr ""
494
 
495
+ #: views/global_options.php:86 views/global_options.php:87
496
  msgid "Apply fade out to playing audio when possible"
497
  msgstr ""
498
 
499
+ #: views/global_options.php:90
500
  msgid "The general settings affect only the PRO version of the plugin"
501
  msgstr ""
502
 
503
+ #: views/global_options.php:90 views/global_options.php:353
504
+ #: views/player_options.php:50 views/player_options.php:271
505
  msgid "CLICK HERE TO GET THE PRO VERSION OF THE PLUGIN"
506
  msgstr ""
507
 
508
+ #: views/global_options.php:93 views/global_options.php:95
509
  msgid ""
510
+ "For buyers, play the purchased audio files instead of the truncated files "
511
+ "for demo"
512
  msgstr ""
513
 
514
+ #: views/global_options.php:96
515
+ msgid "Reset the files"
516
+ msgstr ""
517
+
518
+ #: views/global_options.php:97
519
+ msgid "Reset files interval"
520
+ msgstr ""
521
+
522
+ #: views/global_options.php:98
523
+ msgid "daily"
524
+ msgstr ""
525
+
526
+ #: views/global_options.php:106 views/global_options.php:107
527
  msgid "Truncate the audio files for demo with ffmpeg"
528
  msgstr ""
529
 
530
+ #: views/global_options.php:110 views/global_options.php:111
531
  msgid "ffmpeg path"
532
  msgstr ""
533
 
534
+ #: views/global_options.php:114 views/global_options.php:116
535
  msgid "Watermark audio"
536
  msgstr ""
537
 
538
+ #: views/global_options.php:116
539
  msgid "Select"
540
  msgstr ""
541
 
542
+ #: views/global_options.php:117
543
  msgid ""
544
  "Select an audio file if you want to apply a watermark to the audio files for "
545
  "demos. The watermark will be applied to the protected demos (Experimental "
546
  "feature)."
547
  msgstr ""
548
 
549
+ #: views/global_options.php:124 views/global_options.php:125
550
  msgid "Delete the demo files generated previously"
551
  msgstr ""
552
 
553
+ #: views/global_options.php:131 views/global_options.php:132
554
  msgid "Store demo files on Google Drive"
555
  msgstr ""
556
 
557
+ #: views/global_options.php:135
558
  msgid "Import a JSON Key file"
559
  msgstr ""
560
 
561
+ #: views/global_options.php:137
562
  msgid "JSON Key file"
563
  msgstr ""
564
 
565
+ #: views/global_options.php:181
566
  msgid "Troubleshoot Area"
567
  msgstr ""
568
 
569
+ #: views/global_options.php:185 views/global_options.php:188
570
  msgid "On iPads and iPhones, use native controls"
571
  msgstr ""
572
 
573
+ #: views/global_options.php:189
574
  msgid ""
575
  "tick the checkbox if the players do not work properly on iPads or iPhones"
576
  msgstr ""
577
 
578
+ #: views/global_options.php:194
579
  msgid "Loading players in the onload event"
580
  msgstr ""
581
 
582
+ #: views/global_options.php:197
583
  msgid "Loading placeholder in the onload event"
584
  msgstr ""
585
 
586
+ #: views/global_options.php:198
587
  msgid "tick the checkbox if the players are not being loaded properly"
588
  msgstr ""
589
 
590
+ #: views/global_options.php:203
591
  msgid "For files whose extensions cannot be determined"
592
  msgstr ""
593
 
594
+ #: views/global_options.php:206
595
  msgid ""
596
  "For files whose extensions cannot be determined, handle them as mp3 files"
597
  msgstr ""
598
 
599
+ #: views/global_options.php:207
600
  msgid "handle them as mp3 files"
601
  msgstr ""
602
 
603
+ #: views/global_options.php:212 views/global_options.php:215
604
  msgid ""
605
  "For the WooCommerce Gutenberg Blocks, include the main player in the "
606
  "products titles"
607
  msgstr ""
608
 
609
+ #: views/global_options.php:216
610
  msgid "Includes the main player in front of products titles"
611
  msgstr ""
612
 
613
+ #: views/global_options.php:221 views/global_options.php:224
614
  msgid "WooCommerce hook used to display the players in the shop pages"
615
  msgstr ""
616
 
617
+ #: views/global_options.php:225
618
  msgid ""
619
  "The plugin uses by default the <b>woocommerce_shop_loop_item_title</b> hook. "
620
  "If the player is not being displayed, enter the hook used by the theme "
621
  "active on your website."
622
  msgstr ""
623
 
624
+ #: views/global_options.php:226
625
  msgid "Force the player in the title"
626
  msgstr ""
627
 
628
+ #: views/global_options.php:226
629
  msgid "Forces the audio player to be displayed in the product title."
630
  msgstr ""
631
 
632
+ #: views/global_options.php:231 views/global_options.php:234
633
  msgid "WooCommerce hook used to display the players in the products pages"
634
  msgstr ""
635
 
636
+ #: views/global_options.php:235
637
  msgid ""
638
  "The plugin uses by default the <b>woocommerce_single_product_summary</b> "
639
  "hook. If the player is not being displayed, enter the hook used by the theme "
640
  "active on your website."
641
  msgstr ""
642
 
643
+ #: views/global_options.php:240
644
  msgid ""
645
  "Click on the <a href=\"https://docs.woocommerce.com/wc-apidocs/hook-docs.html"
646
  "\" target=\"_blank\">THIS LINK</a> for the list of available <a href="
648
  "style=\"font-weight:bold;font-size:1.3em;\">WooCommerce Hooks</a>"
649
  msgstr ""
650
 
651
+ #: views/global_options.php:245
652
  msgid "Include music player in all products"
653
  msgstr ""
654
 
655
+ #: views/global_options.php:251
656
  msgid "Products pages only"
657
  msgstr ""
658
 
659
+ #: views/global_options.php:254
660
  msgid "Multiple-entry pages"
661
  msgstr ""
662
 
663
+ #: views/global_options.php:257
664
  msgid "Product and multiple-entry pages"
665
  msgstr ""
666
 
667
+ #: views/global_options.php:262 views/global_options.php:264
668
  msgid "Include players in cart"
669
  msgstr ""
670
 
671
+ #: views/global_options.php:281
672
  msgid "skin 2"
673
  msgstr ""
674
 
675
+ #: views/global_options.php:312 views/global_options.php:315
676
  msgid "Allow multiple players to play simultaneously"
677
  msgstr ""
678
 
679
+ #: views/global_options.php:317
680
  msgid ""
681
  "By default, only one player would be playing at once. By pressing the play "
682
  "button of a player, the other players would stop. By ticking the checkbox, "
683
  "multiple players could play simultaneously."
684
  msgstr ""
685
 
686
+ #: views/global_options.php:322 views/player_options.php:240
687
  msgid "Player volume (from 0 to 1)"
688
  msgstr ""
689
 
690
+ #: views/global_options.php:324 views/player_options.php:242
691
  msgid "Player volume"
692
  msgstr ""
693
 
694
+ #: views/global_options.php:334 views/player_options.php:252
695
  msgid "On cover"
696
  msgstr ""
697
 
698
+ #: views/global_options.php:349 views/player_options.php:267
699
  msgid "Display the player title"
700
  msgstr ""
701
 
702
+ #: views/global_options.php:353 views/player_options.php:271
703
  msgid "The security feature is only available in the PRO version of the plugin"
704
  msgstr ""
705
 
706
+ #: views/global_options.php:356 views/global_options.php:357
707
+ #: views/player_options.php:274 views/player_options.php:275
708
  msgid "Protect the file"
709
  msgstr ""
710
 
711
+ #: views/global_options.php:360 views/global_options.php:362
712
+ #: views/player_options.php:278 views/player_options.php:280
713
  msgid "Percent of audio used for protected playbacks"
714
  msgstr ""
715
 
716
+ #: views/global_options.php:363 views/player_options.php:281
717
  msgid ""
718
  "To prevent unauthorized copying of audio files, the files will be partially "
719
  "accessible"
720
  msgstr ""
721
 
722
+ #: views/global_options.php:368
723
  msgid ""
724
  "Text to display beside the player explaining that demos are partial versions "
725
  "of the original files"
726
  msgstr ""
727
 
728
+ #: views/global_options.php:370
729
  msgid "Explaining that demos are partial versions of the original files"
730
  msgstr ""
731
 
732
+ #: views/global_options.php:384
733
  msgid "Scope"
734
  msgstr ""
735
 
736
+ #: views/global_options.php:385
737
  msgid ""
738
  "Ticking the checkbox the previous settings are applied to all products, even "
739
  "if they have a player enabled."
740
  msgstr ""
741
 
742
+ #: views/global_options.php:385
743
  msgid "Apply the previous settings to all products"
744
  msgstr ""
745
 
746
+ #: views/global_options.php:385
747
  msgid "Apply the previous settings to all products pages in the website."
748
  msgstr ""
749
 
750
+ #: views/global_options.php:397
751
  msgid "Analytics"
752
  msgstr ""
753
 
754
+ #: views/global_options.php:401
755
  msgid ""
756
  "Allows the integration with Google Analytics for registering new events when "
757
  "the songs are played. The event information would include: the URL to the "
758
  "audio file as the event label and the product's id as its value."
759
  msgstr ""
760
 
761
+ #: views/global_options.php:402
762
  msgid "Note"
763
  msgstr ""
764
 
765
+ #: views/global_options.php:402
766
  msgid ""
767
  "If the preload option is configured as Metadata or Auto in the players "
768
  "settings, the event would be registered when the audio file is loaded by the "
769
  "player and not exactly when they are playing."
770
  msgstr ""
771
 
772
+ #: views/global_options.php:407 views/global_options.php:408
773
  msgid "Tracking Id"
774
  msgstr ""
775
 
776
+ #: views/global_options.php:420
777
  msgid "Add ons"
778
  msgstr ""
779
 
780
+ #: views/global_options.php:427
781
  msgid "Save settings"
782
  msgstr ""
783
 
784
+ #: views/player_options.php:50
785
  msgid ""
786
  "The security feature and particular files for demo are only available in the "
787
  "PRO version of the plugin"
788
  msgstr ""
789
 
790
+ #: views/player_options.php:51
791
  msgid ""
792
  "For testing the premium version of the plugin, visit the online demo:<br/> "
793
  "<a href=\"https://demos.dwbooster.com/music-player-for-woocommerce/wp-login."
797
  "WooCommerce Store</a>"
798
  msgstr ""
799
 
800
+ #: views/player_options.php:181
801
  msgid ""
802
  "The player is shown only if the product is \"downloadable\", and there is at "
803
  "least an audio file between the \"Downloadable files\""
804
  msgstr ""
805
 
806
+ #: views/player_options.php:186
807
  msgid "Include on products pages"
808
  msgstr ""
809
 
810
+ #: views/player_options.php:192
811
  msgid "Include on product and multiple-entry pages"
812
  msgstr ""
813
 
814
+ #: views/player_options.php:293
815
  msgid "Own demo files"
816
  msgstr ""
817
 
818
+ #: views/player_options.php:293
819
  msgid "Select my own demo files"
820
  msgstr ""
821
 
822
+ #: views/player_options.php:297
823
  msgid "Demo files"
824
  msgstr ""
825
 
826
+ #: views/player_options.php:301
827
  msgid "Name"
828
  msgstr ""
829
 
830
+ #: views/player_options.php:302 views/player_options.php:312
831
  msgid "File URL"
832
  msgstr ""
833
 
834
+ #: views/player_options.php:309
835
  msgid "File name"
836
  msgstr ""
837
 
838
+ #: views/player_options.php:325
839
  msgid "Add File"
840
  msgstr ""
841
 
843
  msgid "Help"
844
  msgstr ""
845
 
846
+ #: wcmp.php:1015
847
  msgid "There are no products that satisfy the block's settings"
848
  msgstr ""
849
 
pagebuilders/elementor/elementor.pb.php CHANGED
@@ -19,7 +19,7 @@ class Elementor_WCMP_Widget extends Widget_Base
19
 
20
  public function get_icon()
21
  {
22
- return 'fa fa-play';
23
  } // End get_icon
24
 
25
  public function get_categories()
@@ -104,7 +104,6 @@ class Elementor_WCMP_Widget extends Widget_Base
104
  echo $this->_get_shortcode();
105
  } // End render_plain_content
106
 
107
- protected function _content_template() {} // End _content_template
108
  } // End Elementor_WCMP_Widget
109
 
110
 
19
 
20
  public function get_icon()
21
  {
22
+ return 'eicon-video-playlist';
23
  } // End get_icon
24
 
25
  public function get_categories()
104
  echo $this->_get_shortcode();
105
  } // End render_plain_content
106
 
 
107
  } // End Elementor_WCMP_Widget
108
 
109
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: codepeople
3
  Donate link: https://wcmp.dwbooster.com
4
  Tags:WooCommerce,music player,audio,music,song,player,audio player,media player,mp3,m3u,m3u8,wav,oga,ogg,dokan,wcfm
5
  Requires at least: 3.5.0
6
- Tested up to: 5.8
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -144,6 +144,10 @@ The shortcode attributes are:
144
 
145
  `[wcmp-playlist products_ids="*" layout="classic"]`
146
 
 
 
 
 
147
 
148
  Note: In mobiles devices where the direct action of user is required for playing audios and videos, the plugin cannot start playing dynamically.
149
 
@@ -155,10 +159,10 @@ Note: In mobiles devices where the direct action of user is required for playing
155
  * wcmp_before_players_product_page: action called before the players containers in the products pages.
156
  * wcmp_after_players_product_page: action called after the players containers in the products pages.
157
 
158
- * wcmp_audio_tag: filter called when the audio tag is generated. The callback function receives three parameters: the audio tag, the product's id, and the file's id;
159
  * wcmp_file_name: filter called when the file's name is included with the player. The callback function receives three parameters: the file's name, the product's id, and the file's id;
160
 
161
- * wcmp_widget_audio_tag: filter called when the audio tag is generated as a widget on sidebars. The callback function receives three parameters: the audio tag, the product's id, and the file's id;
162
  * wcmp_widget_file_name: filter called when the file's name is included with the player as a widget on sidebars. The callback function receives three parameters: the file's name, the product's id, and the file's id;
163
 
164
  **Other recommended plugins**
@@ -200,6 +204,84 @@ Each time save the data of a product, the files for demo are deleted and generat
200
 
201
  == Changelog ==
202
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
203
  = 1.0.141 =
204
 
205
  * Improves the integration with the Gutenberg Editor.
3
  Donate link: https://wcmp.dwbooster.com
4
  Tags:WooCommerce,music player,audio,music,song,player,audio player,media player,mp3,m3u,m3u8,wav,oga,ogg,dokan,wcfm
5
  Requires at least: 3.5.0
6
+ Tested up to: 5.9
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
144
 
145
  `[wcmp-playlist products_ids="*" layout="classic"]`
146
 
147
+ * purchased_products: generates the list of products purchased by the logged user. `purchased_products="1"`
148
+
149
+ `[wcmp-playlist purchased_products="1" layout="classic"]`
150
+
151
 
152
  Note: In mobiles devices where the direct action of user is required for playing audios and videos, the plugin cannot start playing dynamically.
153
 
159
  * wcmp_before_players_product_page: action called before the players containers in the products pages.
160
  * wcmp_after_players_product_page: action called after the players containers in the products pages.
161
 
162
+ * wcmp_audio_tag: filter called when the audio tag is generated. The callback function receives four parameters: the audio tag, the product's id, the file's id, URL to the audio file;
163
  * wcmp_file_name: filter called when the file's name is included with the player. The callback function receives three parameters: the file's name, the product's id, and the file's id;
164
 
165
+ * wcmp_widget_audio_tag: filter called when the audio tag is generated as a widget on sidebars. The callback function receives four parameters: the audio tag, the product's id, the file's id, URL to the audio file;
166
  * wcmp_widget_file_name: filter called when the file's name is included with the player as a widget on sidebars. The callback function receives three parameters: the file's name, the product's id, and the file's id;
167
 
168
  **Other recommended plugins**
204
 
205
  == Changelog ==
206
 
207
+ = 1.0.161 =
208
+
209
+ * Fixes an issue with the players in the WooCommerce products list (backend).
210
+
211
+ = 1.0.160 =
212
+
213
+ * Modifies the Elementor widget.
214
+
215
+ = 1.0.159 =
216
+
217
+ * Implements the integration with the 'Themify – WooCommerce Product Filter' plugin By Themify.
218
+
219
+ = 1.0.158 =
220
+
221
+ * Implements the integration with the 'YITH WooCommerce Ajax Product Filter' plugin By YITH.
222
+
223
+ = 1.0.157 =
224
+
225
+ * Implements the integration with the 'WOOF – Products Filter for WooCommerce' plugin By realmag777.
226
+
227
+ = 1.0.156 =
228
+
229
+ * Implements the integration with the 'Product Filter by WooBeWoo' plugin.
230
+
231
+ = 1.0.155 =
232
+
233
+ Fixes a conflict with some theme styles.
234
+
235
+ = 1.0.154 =
236
+
237
+ * Implements support for the loop attribute in the playlist shortcode.
238
+
239
+ = 1.0.153 =
240
+
241
+ * Modifies the Elementor widget.
242
+
243
+ = 1.0.152 =
244
+
245
+ * Includes support for the class attribute in the playlist shortcode. The new attribute allows you to assign a class name to the playlist container to customize the appearance of the players easier.
246
+
247
+ = 1.0.151 =
248
+
249
+ * Accepts other products types like Auctions, included by third-party plugins.
250
+
251
+ = 1.0.150 =
252
+
253
+ * Includes the purchased_products attribute to generate the list of products purchased by the logged user.
254
+
255
+ = 1.0.149 =
256
+
257
+ * Modifies the CSS.
258
+
259
+ = 1.0.148 =
260
+
261
+ * Fixes some compatibility issues with the latest update of WooCommerce.
262
+
263
+ = 1.0.147 =
264
+ = 1.0.146 =
265
+
266
+ * Fixes a conflict with third-party themes.
267
+
268
+ = 1.0.145 =
269
+
270
+ * Modifies the integration with the third-party players, CP Media Player, Compact Audio Player, and HTML5 Audio Player.
271
+ * Implement the integration with the third-party player MP3 jPlayer.
272
+
273
+ = 1.0.144 =
274
+
275
+ * Implements new add-ons to allow using players in third-party plugins active on the website (Like CP Media Player, Compact Audio Player, and HTML5 Audio Player).
276
+
277
+ = 1.0.143 =
278
+
279
+ * Modifies the global settings. Allows to reset the demos of purchased files.
280
+
281
+ = 1.0.142 =
282
+
283
+ * Modifies the integration with multivendor plugins (Dokan, WC Vendors, WCFM). Now, the plugin allows disabling the players' settings from the product's edition.
284
+
285
  = 1.0.141 =
286
 
287
  * Improves the integration with the Gutenberg Editor.
views/global_options.php CHANGED
@@ -3,6 +3,7 @@ if( !defined( 'WCMP_PLUGIN_URL' ) ) { echo 'Direct access not allowed.'; exit;
3
 
4
  // include resources
5
  wp_enqueue_style( 'wcmp-admin-style', plugin_dir_url(__FILE__).'../css/style.admin.css', array(), '5.0.23' );
 
6
 
7
  $troubleshoot_default_extension = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_default_extension', false );
8
  $force_main_player_in_title = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_force_main_player_in_title', 1 );
@@ -89,8 +90,14 @@ _e(
89
  <td colspan="2" style="color:red;"><?php _e( 'The general settings affect only the PRO version of the plugin', 'music-player-for-woocommerce'); ?>. <a target="_blank" href="https://wcmp.dwbooster.com"><?php _e('CLICK HERE TO GET THE PRO VERSION OF THE PLUGIN', 'music-player-for-woocommerce'); ?></a></td>
90
  </tr>
91
  <tr>
92
- <td width="30%" style="color:#DDDDDD;"><?php _e( 'For buyers, play the purchased audio files instead the truncated files for demo', 'music-player-for-woocommerce' ); ?></td>
93
- <td><input aria-label="<?php print esc_attr(__('For buyers, play the purchased audio files instead the truncated files for demo','music-player-for-woocommerce')); ?>" type="checkbox" DISABLED /></td>
 
 
 
 
 
 
94
  </tr>
95
  <tr>
96
  <td colspan="2"><hr /></td>
3
 
4
  // include resources
5
  wp_enqueue_style( 'wcmp-admin-style', plugin_dir_url(__FILE__).'../css/style.admin.css', array(), '5.0.23' );
6
+ wp_enqueue_script( 'wcmp-admin-js', plugin_dir_url(__FILE__).'../js/admin.js' );
7
 
8
  $troubleshoot_default_extension = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_default_extension', false );
9
  $force_main_player_in_title = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr( '_wcmp_force_main_player_in_title', 1 );
90
  <td colspan="2" style="color:red;"><?php _e( 'The general settings affect only the PRO version of the plugin', 'music-player-for-woocommerce'); ?>. <a target="_blank" href="https://wcmp.dwbooster.com"><?php _e('CLICK HERE TO GET THE PRO VERSION OF THE PLUGIN', 'music-player-for-woocommerce'); ?></a></td>
91
  </tr>
92
  <tr>
93
+ <td width="30%" style="color:#DDDDDD;"><?php _e( 'For buyers, play the purchased audio files instead of the truncated files for demo', 'music-player-for-woocommerce' ); ?></td>
94
+ <td style="color:#DDDDDD;">
95
+ <input aria-label="<?php print esc_attr(__('For buyers, play the purchased audio files instead of the truncated files for demo','music-player-for-woocommerce')); ?>" type="checkbox" DISABLED />
96
+ <?php _e( 'Reset the files', 'music-player-for-woocommerce' ); ?>
97
+ <select aria-label="<?php esc_attr_e('Reset files interval', 'music-player-for-woocommerce'); ?>" DISABLED>
98
+ <option><?php print esc_html(__('daily', 'music-player-for-woocommerce')); ?></option>
99
+ </select>
100
+ </td>
101
  </tr>
102
  <tr>
103
  <td colspan="2"><hr /></td>
wcmp.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: Music Player for WooCommerce
4
  Plugin URI: https://wcmp.dwbooster.com
5
- Version: 1.0.141
6
  Text Domain: music-player-for-woocommerce
7
  Author: CodePeople
8
  Author URI: https://wcmp.dwbooster.com
@@ -45,6 +45,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
45
  private $_enqueued_resources = false;
46
  private $_insert_player = true;
47
 
 
 
48
  /**
49
  * WCMP constructor
50
  *
@@ -56,6 +58,9 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
56
  $this->_createDir();
57
  register_activation_hook( __FILE__, array( &$this, 'activation' ) );
58
  register_deactivation_hook( __FILE__, array( &$this, 'deactivation' ) );
 
 
 
59
  add_action( 'plugins_loaded', array(&$this, 'load_textdomain') );
60
  add_action('init', array(&$this, 'init'));
61
  add_action('admin_init', array(&$this, 'admin_init'), 99);
@@ -98,7 +103,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
98
  $this->_products_attrs[ $product_id ][ $attr ] = $this->get_global_attr($attr, $default);
99
  }
100
  }
101
- return $this->_products_attrs[ $product_id ][ $attr ];
102
 
103
  } // End get_product_attr
104
 
@@ -106,7 +111,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
106
  {
107
  if(empty($this->_global_attrs)) $this->_global_attrs = get_option('wcmp_global_settings',array());
108
  if( !isset( $this->_global_attrs[ $attr ] ) ) $this->_global_attrs[ $attr ] = $default;
109
- return $this->_global_attrs[ $attr ];
110
 
111
  } // End get_global_attr
112
 
@@ -164,7 +169,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
164
  if(empty($include_main_player_hook)) $include_main_player_hook = 'woocommerce_shop_loop_item_title';
165
  if(empty($include_all_players_hook)) $include_all_players_hook = 'woocommerce_single_product_summary';
166
 
167
- if($this->get_global_attr( '_wcmp_main_player_hook_title', 0 ) == 0)
168
  {
169
  add_action( $include_main_player_hook, array( &$this, 'include_main_player' ), 11 );
170
  }
@@ -185,7 +190,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
185
  }
186
 
187
  // Add product id to audio tag
188
- add_filter('wcmp_audio_tag', array(&$this, 'add_data_product'), 99, 3);
189
 
190
  // Add class name to the feature image of product
191
  add_filter('woocommerce_product_get_image', array(&$this, 'add_class_attachment'),99,6);
@@ -426,7 +431,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
426
  wp_enqueue_style( 'wcmp-style', plugin_dir_url(__FILE__).'css/style.css' );
427
  wp_enqueue_script('jquery');
428
  wp_enqueue_script('wp-mediaelement');
429
- wp_enqueue_script('wcmp-script', plugin_dir_url(__FILE__).'js/public.js', array('jquery', 'wp-mediaelement'), '1.0.141');
430
 
431
  $play_all = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr(
432
  '_wcmp_play_all',
@@ -481,14 +486,24 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
481
 
482
  if(!is_array($atts)) $atts = array();
483
  $post_types = $this->_get_post_types();
484
- if(empty($atts['products_ids']) && !empty($post) && in_array($post->post_type, $post_types))
 
 
 
 
 
485
  {
486
  try{
487
  ob_start();
488
  $this->include_all_players($post->ID);
489
  $output = ob_get_contents();
490
  ob_end_clean();
491
- return $output;
 
 
 
 
 
492
  }
493
  catch(Exception $err)
494
  {
@@ -500,6 +515,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
500
  shortcode_atts(
501
  array(
502
  'products_ids' => '*',
 
503
  'highlight_current_product' => 0,
504
  'continue_playing' => 0,
505
  'player_style' => WCMP_DEFAULT_PLAYER_LAYOUT,
@@ -507,7 +523,9 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
507
  'layout' => 'new',
508
  'cover' => 0,
509
  'volume' => 1,
510
- 'hide_purchase_buttons' => 0
 
 
511
  ),
512
  $atts
513
  )
@@ -529,19 +547,64 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
529
 
530
  $current_post_id = !empty( $post ) ? (is_int($post) ? $post : $post->ID) : -1;
531
 
532
- $query = 'SELECT posts.ID FROM '.$wpdb->posts.' AS posts, '.$wpdb->postmeta.' as postmeta WHERE posts.post_status="publish" AND posts.post_type IN ('.$this->_get_post_types(true).') AND posts.ID = postmeta.post_id AND postmeta.meta_key="_wcmp_enable_player" AND (postmeta.meta_value="yes" OR postmeta.meta_value="1")';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
533
 
534
- if( strpos( '*', $products_ids ) === false )
535
- {
536
- $query .= ' AND posts.ID IN ('.$products_ids.')';
537
- $query .= ' ORDER BY FIELD(posts.ID,'.$products_ids.')';
538
- }
539
- else
540
- {
541
- $query .= ' ORDER BY posts.post_title ASC';
542
- }
543
-
544
- $products = $wpdb->get_results( $query );
545
  if( !empty( $products ) )
546
  {
547
  // Enqueue resources
@@ -555,13 +618,14 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
555
  array('continue_playing' => $continue_playing)
556
  );
557
  $counter = 0;
 
558
  foreach( $products as $product )
559
  {
560
  $product_obj = wc_get_product( $product->ID );
561
  $counter++;
562
  $preload = $this->get_product_attr($product->ID, '_wcmp_preload', '');
563
- $class = 'wcmp-even-product';
564
- if( $counter%2 == 1) $class = 'wcmp-odd-product';
565
 
566
  $audio_files = $this->get_product_files( $product->ID );
567
  if(!is_array($audio_files)) continue;
@@ -575,7 +639,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
575
  {
576
  $price = $product_obj->get_price();
577
  $output .= '
578
- <div class="wcmp-widget-product controls-'.esc_attr($controls).' '.esc_attr( $class ).' '.esc_attr( ( $product->ID == $current_post_id && $highlight_current_product) ? 'wcmp-current-product' : '' ).'">
579
  <div class="wcmp-widget-product-header">
580
  <div class="wcmp-widget-product-title">
581
  <a href="'.esc_url( get_permalink( $product->ID ) ).'">'.$product_obj->get_name().'</a>
@@ -614,7 +678,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
614
  )
615
  ),
616
  $product->ID,
617
- $index
 
618
  );
619
  $file_title = esc_html(apply_filters('wcmp_widget_file_name', $file[ 'name' ], $product->ID, $index));
620
  $output .= '
@@ -636,7 +701,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
636
  }
637
  else // Load the previous playlist layout
638
  {
639
- $output .= '<ul class="wcmp-widget-playlist controls-'.esc_attr($controls).' '.esc_attr( $class ).' '.esc_attr( ( $product->ID == $current_post_id && $highlight_current_product) ? 'wcmp-current-product' : '' ).'">';
640
 
641
  if(!empty($featured_image))
642
  $output .= '<li style="display:table-row;"><img src="'.esc_attr($featured_image).'" class="wcmp-widget-feature-image" /><div class="wcmp-widget-product-files-list"><ul>';
@@ -660,7 +725,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
660
  )
661
  ),
662
  $product->ID,
663
- $index
 
664
  );
665
  $file_title = esc_html(apply_filters('wcmp_widget_file_name', ( ( !empty( $file[ 'name' ] ) ) ? $file[ 'name' ] : $product->post_title ),$product->ID, $index));
666
 
@@ -673,6 +739,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
673
  $output .= '</ul>';
674
  }
675
  }
 
676
  }
677
  return $output;
678
  } // End replace_playlist_shortcode
@@ -751,10 +818,10 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
751
 
752
  public function include_main_player_filter($value,$id)
753
  {
754
- if($this->get_global_attr( '_wcmp_main_player_hook_title', 0 ) == 1)
755
  {
756
  try{
757
- if(!is_product() && !is_cart() && !is_page('cart') && !is_checkout() && is_int($id))
758
  {
759
  $p = wc_get_product($id);
760
  if(!empty($p))
@@ -811,7 +878,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
811
  )
812
  ),
813
  $id,
814
- $index
 
815
  );
816
 
817
  do_action('wcmp_before_player_shop_page',$id);
@@ -844,6 +912,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
844
  $merge_grouped_clss = ($merge_grouped) ? 'merge_in_grouped_products' : '';
845
 
846
  $counter = count( $files );
 
847
  do_action('wcmp_before_players_product_page',$id);
848
  if( $counter == 1 )
849
  {
@@ -866,7 +935,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
866
  )
867
  ),
868
  $id,
869
- $index
 
870
  );
871
  $title = esc_html(($player_title)?apply_filters('wcmp_file_name',$file['name'],$id,$index):'');
872
  print '<div class="wcmp-player-container '.$merge_grouped_clss.' product-'.$file['product'].'">'.$audio_tag.'</div><div class="wcmp-player-title">'.$title.'</div><div style="clear:both;"></div>';
@@ -895,7 +965,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
895
  )
896
  ),
897
  $id,
898
- $index
 
899
  );
900
  $title = esc_html(($player_title)?apply_filters('wcmp_file_name',$file['name'],$id,$index):'');
901
 
@@ -934,7 +1005,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
934
  return $player.$name;
935
  } // product_table_data_name
936
 
937
- public function add_data_product($player, $product_id, $index)
938
  {
939
  $player = preg_replace('/<audio\b/i', '<audio controlslist="nodownload" data-product="'.esc_attr($product_id).'" ',$player);
940
  return $player;
@@ -959,6 +1030,16 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
959
  } // add_class_single_product_image
960
 
961
  //******************** PRIVATE METHODS ************************
 
 
 
 
 
 
 
 
 
 
962
  private function _get_post_types($mysql_in = false)
963
  {
964
  $post_types = array('product');
@@ -1221,12 +1302,6 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
1221
 
1222
  switch( $product_type )
1223
  {
1224
- case 'simple':
1225
- // $_files = $product->get_files();
1226
- $_files = $product->get_downloads();
1227
- $_files = $this->_edit_files_array($id, $_files );
1228
- $files_arr = array_merge( $files_arr, $_files );
1229
- break;
1230
  case 'variable':
1231
  case 'grouped':
1232
  $children = $product->get_children();
@@ -1238,8 +1313,12 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
1238
 
1239
  foreach( $children as $child_obj )
1240
  $files_arr = $this->_get_recursive_product_files( $child_obj, $files_arr );
1241
-
1242
  break;
 
 
 
 
 
1243
  }
1244
  }
1245
  return $files_arr;
@@ -1311,7 +1390,8 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
1311
  $url = $args[ 'url' ];
1312
  $url = do_shortcode($url);
1313
 
1314
- if(strpos($url, '//') === 0) $url_fixed = 'http'.(is_ssl() ? 's:' : ':').$url;
 
1315
  elseif(strpos($url, '/') === 0) $url_fixed = rtrim(WCMP_WEBSITE_URL, '/').$url;
1316
  else $url_fixed = $url;
1317
 
@@ -1388,6 +1468,7 @@ if ( !class_exists( 'WooCommerceMusicPlayer' ) ) {
1388
 
1389
  private function _is_local( $url )
1390
  {
 
1391
  $attachment_id = attachment_url_to_postid( $url );
1392
  if( $attachment_id )
1393
  {
2
  /*
3
  Plugin Name: Music Player for WooCommerce
4
  Plugin URI: https://wcmp.dwbooster.com
5
+ Version: 1.0.161
6
  Text Domain: music-player-for-woocommerce
7
  Author: CodePeople
8
  Author URI: https://wcmp.dwbooster.com
45
  private $_enqueued_resources = false;
46
  private $_insert_player = true;
47
 
48
+ private $_force_hook_title = 0;
49
+
50
  /**
51
  * WCMP constructor
52
  *
58
  $this->_createDir();
59
  register_activation_hook( __FILE__, array( &$this, 'activation' ) );
60
  register_deactivation_hook( __FILE__, array( &$this, 'deactivation' ) );
61
+
62
+ $this->_init_force_in_title();
63
+
64
  add_action( 'plugins_loaded', array(&$this, 'load_textdomain') );
65
  add_action('init', array(&$this, 'init'));
66
  add_action('admin_init', array(&$this, 'admin_init'), 99);
103
  $this->_products_attrs[ $product_id ][ $attr ] = $this->get_global_attr($attr, $default);
104
  }
105
  }
106
+ return apply_filters('wcmp_product_attr', $this->_products_attrs[ $product_id ][ $attr ], $product_id, $attr);
107
 
108
  } // End get_product_attr
109
 
111
  {
112
  if(empty($this->_global_attrs)) $this->_global_attrs = get_option('wcmp_global_settings',array());
113
  if( !isset( $this->_global_attrs[ $attr ] ) ) $this->_global_attrs[ $attr ] = $default;
114
+ return apply_filters('wcmp_global_attr', $this->_global_attrs[ $attr ], $attr);
115
 
116
  } // End get_global_attr
117
 
169
  if(empty($include_main_player_hook)) $include_main_player_hook = 'woocommerce_shop_loop_item_title';
170
  if(empty($include_all_players_hook)) $include_all_players_hook = 'woocommerce_single_product_summary';
171
 
172
+ if($this->_force_hook_title == 0)
173
  {
174
  add_action( $include_main_player_hook, array( &$this, 'include_main_player' ), 11 );
175
  }
190
  }
191
 
192
  // Add product id to audio tag
193
+ add_filter('wcmp_audio_tag', array(&$this, 'add_data_product'), 99, 4);
194
 
195
  // Add class name to the feature image of product
196
  add_filter('woocommerce_product_get_image', array(&$this, 'add_class_attachment'),99,6);
431
  wp_enqueue_style( 'wcmp-style', plugin_dir_url(__FILE__).'css/style.css' );
432
  wp_enqueue_script('jquery');
433
  wp_enqueue_script('wp-mediaelement');
434
+ wp_enqueue_script('wcmp-script', plugin_dir_url(__FILE__).'js/public.js', array('jquery', 'wp-mediaelement'), '1.0.161');
435
 
436
  $play_all = $GLOBALS[ 'WooCommerceMusicPlayer' ]->get_global_attr(
437
  '_wcmp_play_all',
486
 
487
  if(!is_array($atts)) $atts = array();
488
  $post_types = $this->_get_post_types();
489
+ if(
490
+ empty($atts['products_ids']) &&
491
+ empty($atts['purchased_products']) &&
492
+ !empty($post) &&
493
+ in_array($post->post_type, $post_types)
494
+ )
495
  {
496
  try{
497
  ob_start();
498
  $this->include_all_players($post->ID);
499
  $output = ob_get_contents();
500
  ob_end_clean();
501
+
502
+ $class = esc_attr(isset($atts['class']) ? $atts['class'] : '');
503
+
504
+ return strpos($output, 'wcmp-player-list') !== false ?
505
+ str_replace('wcmp-player-list', $class.' wcmp-player-list', $output) :
506
+ str_replace('wcmp-player-container', $class.' wcmp-player-container', $output);
507
  }
508
  catch(Exception $err)
509
  {
515
  shortcode_atts(
516
  array(
517
  'products_ids' => '*',
518
+ 'purchased_products' => 0,
519
  'highlight_current_product' => 0,
520
  'continue_playing' => 0,
521
  'player_style' => WCMP_DEFAULT_PLAYER_LAYOUT,
523
  'layout' => 'new',
524
  'cover' => 0,
525
  'volume' => 1,
526
+ 'hide_purchase_buttons' => 0,
527
+ 'class' => '',
528
+ 'loop' => 0
529
  ),
530
  $atts
531
  )
547
 
548
  $current_post_id = !empty( $post ) ? (is_int($post) ? $post : $post->ID) : -1;
549
 
550
+ $query = 'SELECT posts.ID FROM '.$wpdb->posts.' AS posts, '.$wpdb->postmeta.' as postmeta WHERE posts.post_status="publish" AND posts.post_type IN ('.$this->_get_post_types(true).') AND posts.ID = postmeta.post_id AND postmeta.meta_key="_wcmp_enable_player" AND (postmeta.meta_value="yes" OR postmeta.meta_value="1")';
551
+
552
+ if(!empty($purchased_products))
553
+ {
554
+ // Hide the purchase buttons
555
+ $hide_purchase_buttons = 1;
556
+
557
+ // Getting the list of purchased products
558
+ $_current_user_id = get_current_user_id();
559
+ if($_current_user_id == 0) return $output;
560
+
561
+ // GET USER ORDERS (COMPLETED + PROCESSING)
562
+ $customer_orders = get_posts(
563
+ array(
564
+ 'numberposts' => -1,
565
+ 'meta_key' => '_customer_user',
566
+ 'meta_value' => $_current_user_id,
567
+ 'post_type' => wc_get_order_types(),
568
+ 'post_status' => array_keys( wc_get_is_paid_statuses() ),
569
+ )
570
+ );
571
+
572
+ if(empty($customer_orders)) return $output;
573
+
574
+ // LOOP THROUGH ORDERS AND GET PRODUCT IDS
575
+ $product_ids = array();
576
+
577
+ foreach($customer_orders as $customer_order)
578
+ {
579
+ $order = wc_get_order($customer_order->ID);
580
+ $items = $order->get_items();
581
+ foreach($items as $item)
582
+ {
583
+ $product_id = $item->get_product_id();
584
+ $product_ids[] = $product_id;
585
+ }
586
+ }
587
+ $product_ids = array_unique( $product_ids );
588
+ $product_ids_str = implode( ",", $product_ids );
589
+
590
+ $query .= ' AND posts.ID IN ('.$product_ids_str.')';
591
+ $query .= ' ORDER BY FIELD(posts.ID,'.$product_ids_str.')';
592
+ }
593
+ else
594
+ {
595
+ if( strpos( '*', $products_ids ) === false )
596
+ {
597
+ $query .= ' AND posts.ID IN ('.$products_ids.')';
598
+ $query .= ' ORDER BY FIELD(posts.ID,'.$products_ids.')';
599
+ }
600
+ else
601
+ {
602
+ $query .= ' ORDER BY posts.post_title ASC';
603
+ }
604
+ }
605
+
606
+ $products = $wpdb->get_results( $query );
607
 
 
 
 
 
 
 
 
 
 
 
 
608
  if( !empty( $products ) )
609
  {
610
  // Enqueue resources
618
  array('continue_playing' => $continue_playing)
619
  );
620
  $counter = 0;
621
+ $output .= '<div data-loop="'.(is_numeric($loop) && intval($loop) ? 1 : 0).'">';
622
  foreach( $products as $product )
623
  {
624
  $product_obj = wc_get_product( $product->ID );
625
  $counter++;
626
  $preload = $this->get_product_attr($product->ID, '_wcmp_preload', '');
627
+ $row_class = 'wcmp-even-product';
628
+ if( $counter%2 == 1) $row_class = 'wcmp-odd-product';
629
 
630
  $audio_files = $this->get_product_files( $product->ID );
631
  if(!is_array($audio_files)) continue;
639
  {
640
  $price = $product_obj->get_price();
641
  $output .= '
642
+ <div class="wcmp-widget-product controls-'.esc_attr($controls).' '.esc_attr($class).' '.esc_attr( $row_class ).' '.esc_attr( ( $product->ID == $current_post_id && $highlight_current_product) ? 'wcmp-current-product' : '' ).'">
643
  <div class="wcmp-widget-product-header">
644
  <div class="wcmp-widget-product-title">
645
  <a href="'.esc_url( get_permalink( $product->ID ) ).'">'.$product_obj->get_name().'</a>
678
  )
679
  ),
680
  $product->ID,
681
+ $index,
682
+ $audio_url
683
  );
684
  $file_title = esc_html(apply_filters('wcmp_widget_file_name', $file[ 'name' ], $product->ID, $index));
685
  $output .= '
701
  }
702
  else // Load the previous playlist layout
703
  {
704
+ $output .= '<ul class="wcmp-widget-playlist controls-'.esc_attr($controls).' '.esc_attr($class).' '.esc_attr( $row_class ).' '.esc_attr( ( $product->ID == $current_post_id && $highlight_current_product) ? 'wcmp-current-product' : '' ).'">';
705
 
706
  if(!empty($featured_image))
707
  $output .= '<li style="display:table-row;"><img src="'.esc_attr($featured_image).'" class="wcmp-widget-feature-image" /><div class="wcmp-widget-product-files-list"><ul>';
725
  )
726
  ),
727
  $product->ID,
728
+ $index,
729
+ $audio_url
730
  );
731
  $file_title = esc_html(apply_filters('wcmp_widget_file_name', ( ( !empty( $file[ 'name' ] ) ) ? $file[ 'name' ] : $product->post_title ),$product->ID, $index));
732
 
739
  $output .= '</ul>';
740
  }
741
  }
742
+ $output .= '</div>';
743
  }
744
  return $output;
745
  } // End replace_playlist_shortcode
818
 
819
  public function include_main_player_filter($value,$id)
820
  {
821
+ if($this->_force_hook_title)
822
  {
823
  try{
824
+ if(!is_admin() && !is_product() && !is_cart() && !is_page('cart') && !is_checkout() && is_int($id))
825
  {
826
  $p = wc_get_product($id);
827
  if(!empty($p))
878
  )
879
  ),
880
  $id,
881
+ $index,
882
+ $audio_url
883
  );
884
 
885
  do_action('wcmp_before_player_shop_page',$id);
912
  $merge_grouped_clss = ($merge_grouped) ? 'merge_in_grouped_products' : '';
913
 
914
  $counter = count( $files );
915
+
916
  do_action('wcmp_before_players_product_page',$id);
917
  if( $counter == 1 )
918
  {
935
  )
936
  ),
937
  $id,
938
+ $index,
939
+ $audio_url
940
  );
941
  $title = esc_html(($player_title)?apply_filters('wcmp_file_name',$file['name'],$id,$index):'');
942
  print '<div class="wcmp-player-container '.$merge_grouped_clss.' product-'.$file['product'].'">'.$audio_tag.'</div><div class="wcmp-player-title">'.$title.'</div><div style="clear:both;"></div>';
965
  )
966
  ),
967
  $id,
968
+ $index,
969
+ $audio_url
970
  );
971
  $title = esc_html(($player_title)?apply_filters('wcmp_file_name',$file['name'],$id,$index):'');
972
 
1005
  return $player.$name;
1006
  } // product_table_data_name
1007
 
1008
+ public function add_data_product($player, $product_id, $index, $url)
1009
  {
1010
  $player = preg_replace('/<audio\b/i', '<audio controlslist="nodownload" data-product="'.esc_attr($product_id).'" ',$player);
1011
  return $player;
1030
  } // add_class_single_product_image
1031
 
1032
  //******************** PRIVATE METHODS ************************
1033
+
1034
+ private function _init_force_in_title()
1035
+ {
1036
+ $this->_force_hook_title = $this->get_global_attr('_wcmp_main_player_hook_title', 0);
1037
+
1038
+ // Integration with "WOOF – Products Filter for WooCommerce" by realmag777
1039
+ if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'woof_draw_products') $this->_force_hook_title = 1;
1040
+
1041
+ } // End _init_force_in_title
1042
+
1043
  private function _get_post_types($mysql_in = false)
1044
  {
1045
  $post_types = array('product');
1302
 
1303
  switch( $product_type )
1304
  {
 
 
 
 
 
 
1305
  case 'variable':
1306
  case 'grouped':
1307
  $children = $product->get_children();
1313
 
1314
  foreach( $children as $child_obj )
1315
  $files_arr = $this->_get_recursive_product_files( $child_obj, $files_arr );
 
1316
  break;
1317
+ default:
1318
+ $_files = $product->get_downloads();
1319
+ $_files = $this->_edit_files_array($id, $_files);
1320
+ $files_arr = array_merge( $files_arr, $_files );
1321
+ break;
1322
  }
1323
  }
1324
  return $files_arr;
1390
  $url = $args[ 'url' ];
1391
  $url = do_shortcode($url);
1392
 
1393
+ if(file_exists($url)) $url_fixed = $url;
1394
+ elseif(strpos($url, '//') === 0) $url_fixed = 'http'.(is_ssl() ? 's:' : ':').$url;
1395
  elseif(strpos($url, '/') === 0) $url_fixed = rtrim(WCMP_WEBSITE_URL, '/').$url;
1396
  else $url_fixed = $url;
1397
 
1468
 
1469
  private function _is_local( $url )
1470
  {
1471
+ if(file_exists($url)) return $url;
1472
  $attachment_id = attachment_url_to_postid( $url );
1473
  if( $attachment_id )
1474
  {
widgets/playlist_widget/css/style.css CHANGED
@@ -1,7 +1,7 @@
1
  .wcmp-widget-playlist{list-style: none; margin:0 !important; padding:0 !important;}
2
  .wcmp-widget-playlist ul{margin: 0; padding: 0;}
3
  .wcmp-widget-playlist *{word-break:normal !important;}
4
- .controls-track .wcmp-widget-playlist-item{display: flex; align-items:center; line-height:normal;padding: 5px 0 !important;clear:both;}
5
  .wcmp-widget-playlist-item .mejs-controls{top: 0;}
6
  .wcmp-odd-product{background-color:#FAFAFA; border-top: 1px solid #DADADA; border-bottom: 1px solid #DADADA;}
7
  .wcmp-current-product{background-color:#FFFFD7;}
@@ -22,6 +22,7 @@
22
  display:inline-block; width:24px; height:24px;
23
  }
24
  .wcmp-widget-product .wcmp-widget-product-file{display:flex;align-items:center;margin-bottom:5px;}
 
25
 
26
  .wcmp-widget-product-files{display: table;width:100%;}
27
  .wcmp-widget-feature-image{display:table-cell;max-width:80px;margin-right:10px;}
1
  .wcmp-widget-playlist{list-style: none; margin:0 !important; padding:0 !important;}
2
  .wcmp-widget-playlist ul{margin: 0; padding: 0;}
3
  .wcmp-widget-playlist *{word-break:normal !important;}
4
+ .controls-track .wcmp-widget-playlist-item{display: flex !important; align-items:center; line-height:normal;padding: 5px !important;clear:both;}
5
  .wcmp-widget-playlist-item .mejs-controls{top: 0;}
6
  .wcmp-odd-product{background-color:#FAFAFA; border-top: 1px solid #DADADA; border-bottom: 1px solid #DADADA;}
7
  .wcmp-current-product{background-color:#FFFFD7;}
22
  display:inline-block; width:24px; height:24px;
23
  }
24
  .wcmp-widget-product .wcmp-widget-product-file{display:flex;align-items:center;margin-bottom:5px;}
25
+ .wcmp-widget-product.controls-all .wcmp-widget-product-file{display:block;}
26
 
27
  .wcmp-widget-product-files{display: table;width:100%;}
28
  .wcmp-widget-feature-image{display:table-cell;max-width:80px;margin-right:10px;}