PluginProbe
Elementor Website Builder – more than just a page builder / 3.6.1
Elementor Website Builder – more than just a page builder v3.6.1
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / includes / widgets / audio.php

audio.php in Elementor Website Builder – more than just a page builder 3.6.1, at includes/widgets/audio.php

348 lines 7.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor;
3
4 use Elementor\Modules\DynamicTags\Module as TagsModule;
5
6 if ( ! defined( 'ABSPATH' ) ) {
7 exit; // Exit if accessed directly.
8 }
9
10 /**
11 * Elementor audio widget.
12 *
13 * Elementor widget that displays an audio player.
14 *
15 * @since 1.0.0
16 */
17 class Widget_Audio extends Widget_Base {
18
19 /**
20 * Current instance.
21 *
22 * @access protected
23 *
24 * @var array
25 */
26 protected $_current_instance = [];
27
28 /**
29 * Get widget name.
30 *
31 * Retrieve audio widget name.
32 *
33 * @since 1.0.0
34 * @access public
35 *
36 * @return string Widget name.
37 */
38 public function get_name() {
39 return 'audio';
40 }
41
42 /**
43 * Get widget title.
44 *
45 * Retrieve audio widget title.
46 *
47 * @since 1.0.0
48 * @access public
49 *
50 * @return string Widget title.
51 */
52 public function get_title() {
53 return esc_html__( 'SoundCloud', 'elementor' );
54 }
55
56 /**
57 * Get widget icon.
58 *
59 * Retrieve audio widget icon.
60 *
61 * @since 1.0.0
62 * @access public
63 *
64 * @return string Widget icon.
65 */
66 public function get_icon() {
67 return 'eicon-headphones';
68 }
69
70 /**
71 * Get widget keywords.
72 *
73 * Retrieve the list of keywords the widget belongs to.
74 *
75 * @since 2.1.0
76 * @access public
77 *
78 * @return array Widget keywords.
79 */
80 public function get_keywords() {
81 return [ 'audio', 'player', 'soundcloud', 'embed' ];
82 }
83
84 /**
85 * Register audio widget controls.
86 *
87 * Adds different input fields to allow the user to change and customize the widget settings.
88 *
89 * @since 3.1.0
90 * @access protected
91 */
92 protected function register_controls() {
93 $this->start_controls_section(
94 'section_audio',
95 [
96 'label' => esc_html__( 'SoundCloud', 'elementor' ),
97 ]
98 );
99
100 $this->add_control(
101 'link',
102 [
103 'label' => esc_html__( 'Link', 'elementor' ),
104 'type' => Controls_Manager::URL,
105 'dynamic' => [
106 'active' => true,
107 'categories' => [
108 TagsModule::POST_META_CATEGORY,
109 TagsModule::URL_CATEGORY,
110 ],
111 ],
112 'default' => [
113 'url' => 'https://soundcloud.com/shchxango/john-coltrane-1963-my-favorite',
114 ],
115 'options' => false,
116 ]
117 );
118
119 $this->add_control(
120 'visual',
121 [
122 'label' => esc_html__( 'Visual Player', 'elementor' ),
123 'type' => Controls_Manager::SELECT,
124 'default' => 'no',
125 'options' => [
126 'yes' => esc_html__( 'Yes', 'elementor' ),
127 'no' => esc_html__( 'No', 'elementor' ),
128 ],
129 ]
130 );
131
132 $this->add_control(
133 'sc_options',
134 [
135 'label' => esc_html__( 'Additional Options', 'elementor' ),
136 'type' => Controls_Manager::HEADING,
137 'separator' => 'before',
138 ]
139 );
140
141 $this->add_control(
142 'sc_auto_play',
143 [
144 'label' => esc_html__( 'Autoplay', 'elementor' ),
145 'type' => Controls_Manager::SWITCHER,
146 ]
147 );
148
149 $this->add_control(
150 'sc_buying',
151 [
152 'label' => esc_html__( 'Buy Button', 'elementor' ),
153 'type' => Controls_Manager::SWITCHER,
154 'label_off' => esc_html__( 'Hide', 'elementor' ),
155 'label_on' => esc_html__( 'Show', 'elementor' ),
156 'default' => 'yes',
157 ]
158 );
159
160 $this->add_control(
161 'sc_liking',
162 [
163 'label' => esc_html__( 'Like Button', 'elementor' ),
164 'type' => Controls_Manager::SWITCHER,
165 'label_off' => esc_html__( 'Hide', 'elementor' ),
166 'label_on' => esc_html__( 'Show', 'elementor' ),
167 'default' => 'yes',
168 ]
169 );
170
171 $this->add_control(
172 'sc_download',
173 [
174 'label' => esc_html__( 'Download Button', 'elementor' ),
175 'type' => Controls_Manager::SWITCHER,
176 'label_off' => esc_html__( 'Hide', 'elementor' ),
177 'label_on' => esc_html__( 'Show', 'elementor' ),
178 'default' => 'yes',
179 ]
180 );
181
182 $this->add_control(
183 'sc_show_artwork',
184 [
185 'label' => esc_html__( 'Artwork', 'elementor' ),
186 'type' => Controls_Manager::SWITCHER,
187 'label_off' => esc_html__( 'Hide', 'elementor' ),
188 'label_on' => esc_html__( 'Show', 'elementor' ),
189 'default' => 'yes',
190 'condition' => [
191 'visual' => 'no',
192 ],
193 ]
194 );
195
196 $this->add_control(
197 'sc_sharing',
198 [
199 'label' => esc_html__( 'Share Button', 'elementor' ),
200 'type' => Controls_Manager::SWITCHER,
201 'label_off' => esc_html__( 'Hide', 'elementor' ),
202 'label_on' => esc_html__( 'Show', 'elementor' ),
203 'default' => 'yes',
204 ]
205 );
206
207 $this->add_control(
208 'sc_show_comments',
209 [
210 'label' => esc_html__( 'Comments', 'elementor' ),
211 'type' => Controls_Manager::SWITCHER,
212 'label_off' => esc_html__( 'Hide', 'elementor' ),
213 'label_on' => esc_html__( 'Show', 'elementor' ),
214 'default' => 'yes',
215 ]
216 );
217
218 $this->add_control(
219 'sc_show_playcount',
220 [
221 'label' => esc_html__( 'Play Counts', 'elementor' ),
222 'type' => Controls_Manager::SWITCHER,
223 'label_off' => esc_html__( 'Hide', 'elementor' ),
224 'label_on' => esc_html__( 'Show', 'elementor' ),
225 'default' => 'yes',
226 ]
227 );
228
229 $this->add_control(
230 'sc_show_user',
231 [
232 'label' => esc_html__( 'Username', 'elementor' ),
233 'type' => Controls_Manager::SWITCHER,
234 'label_off' => esc_html__( 'Hide', 'elementor' ),
235 'label_on' => esc_html__( 'Show', 'elementor' ),
236 'default' => 'yes',
237 ]
238 );
239
240 $this->add_control(
241 'sc_color',
242 [
243 'label' => esc_html__( 'Controls Color', 'elementor' ),
244 'type' => Controls_Manager::COLOR,
245 ]
246 );
247
248 $this->add_control(
249 'view',
250 [
251 'label' => esc_html__( 'View', 'elementor' ),
252 'type' => Controls_Manager::HIDDEN,
253 'default' => 'soundcloud',
254 ]
255 );
256
257 $this->end_controls_section();
258
259 }
260
261 /**
262 * Render audio widget output on the frontend.
263 *
264 * Written in PHP and used to generate the final HTML.
265 *
266 * @since 1.0.0
267 * @access protected
268 */
269 protected function render() {
270 $settings = $this->get_settings_for_display();
271
272 if ( empty( $settings['link'] ) ) {
273 return;
274 }
275
276 $this->_current_instance = $settings;
277
278 add_filter( 'oembed_result', [ $this, 'filter_oembed_result' ], 50, 3 );
279 $video_html = wp_oembed_get( $settings['link']['url'], wp_embed_defaults() );
280 remove_filter( 'oembed_result', [ $this, 'filter_oembed_result' ], 50 );
281
282 if ( $video_html ) : ?>
283 <div class="elementor-soundcloud-wrapper">
284 <?php Utils::print_wp_kses_extended( $video_html, [ 'iframe' ] ); ?>
285 </div>
286 <?php
287 endif;
288 }
289
290 /**
291 * Filter audio widget oEmbed results.
292 *
293 * Written in PHP and used to generate the final HTML.
294 *
295 * @since 1.0.0
296 * @access public
297 *
298 * @param string $html The HTML returned by the oEmbed provider.
299 *
300 * @return string Filtered audio widget oEmbed HTML.
301 */
302 public function filter_oembed_result( $html ) {
303 $param_keys = [
304 'auto_play',
305 'buying',
306 'liking',
307 'download',
308 'sharing',
309 'show_comments',
310 'show_playcount',
311 'show_user',
312 'show_artwork',
313 ];
314
315 $params = [];
316
317 foreach ( $param_keys as $param_key ) {
318 $params[ $param_key ] = 'yes' === $this->_current_instance[ 'sc_' . $param_key ] ? 'true' : 'false';
319 }
320
321 $params['color'] = str_replace( '#', '', $this->_current_instance['sc_color'] );
322
323 preg_match( '/<iframe.*src=\"(.*)\".*><\/iframe>/isU', $html, $matches );
324
325 $url = esc_url( add_query_arg( $params, $matches[1] ) );
326
327 $visual = 'yes' === $this->_current_instance['visual'] ? 'true' : 'false';
328
329 $html = str_replace( [ $matches[1], 'visual=true' ], [ $url, 'visual=' . $visual ], $html );
330
331 if ( 'false' === $visual ) {
332 $html = str_replace( 'height="400"', 'height="200"', $html );
333 }
334
335 return $html;
336 }
337
338 /**
339 * Render audio widget output in the editor.
340 *
341 * Written as a Backbone JavaScript template and used to generate the live preview.
342 *
343 * @since 2.9.0
344 * @access protected
345 */
346 protected function content_template() {}
347 }
348