| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347 |
- <?php
- namespace Elementor;
- use Elementor\Modules\DynamicTags\Module as TagsModule;
- if ( ! defined( 'ABSPATH' ) ) {
- exit; // Exit if accessed directly.
- }
- /**
- * Elementor audio widget.
- *
- * Elementor widget that displays an audio player.
- *
- * @since 1.0.0
- */
- class Widget_Audio extends Widget_Base {
- /**
- * Current instance.
- *
- * @access protected
- *
- * @var array
- */
- protected $_current_instance = [];
- /**
- * Get widget name.
- *
- * Retrieve audio widget name.
- *
- * @since 1.0.0
- * @access public
- *
- * @return string Widget name.
- */
- public function get_name() {
- return 'audio';
- }
- /**
- * Get widget title.
- *
- * Retrieve audio widget title.
- *
- * @since 1.0.0
- * @access public
- *
- * @return string Widget title.
- */
- public function get_title() {
- return __( 'SoundCloud', 'elementor' );
- }
- /**
- * Get widget icon.
- *
- * Retrieve audio widget icon.
- *
- * @since 1.0.0
- * @access public
- *
- * @return string Widget icon.
- */
- public function get_icon() {
- return 'eicon-headphones';
- }
- /**
- * Get widget keywords.
- *
- * Retrieve the list of keywords the widget belongs to.
- *
- * @since 2.1.0
- * @access public
- *
- * @return array Widget keywords.
- */
- public function get_keywords() {
- return [ 'audio', 'player', 'soundcloud', 'embed' ];
- }
- /**
- * Register audio widget controls.
- *
- * Adds different input fields to allow the user to change and customize the widget settings.
- *
- * @since 1.0.0
- * @access protected
- */
- protected function _register_controls() {
- $this->start_controls_section(
- 'section_audio',
- [
- 'label' => __( 'SoundCloud', 'elementor' ),
- ]
- );
- $this->add_control(
- 'link',
- [
- 'label' => __( 'Link', 'elementor' ),
- 'type' => Controls_Manager::URL,
- 'dynamic' => [
- 'active' => true,
- 'categories' => [
- TagsModule::POST_META_CATEGORY,
- TagsModule::URL_CATEGORY,
- ],
- ],
- 'default' => [
- 'url' => 'https://soundcloud.com/shchxango/john-coltrane-1963-my-favorite',
- ],
- 'show_external' => false,
- ]
- );
- $this->add_control(
- 'visual',
- [
- 'label' => __( 'Visual Player', 'elementor' ),
- 'type' => Controls_Manager::SELECT,
- 'default' => 'no',
- 'options' => [
- 'yes' => __( 'Yes', 'elementor' ),
- 'no' => __( 'No', 'elementor' ),
- ],
- ]
- );
- $this->add_control(
- 'sc_options',
- [
- 'label' => __( 'Additional Options', 'elementor' ),
- 'type' => Controls_Manager::HEADING,
- 'separator' => 'before',
- ]
- );
- $this->add_control(
- 'sc_auto_play',
- [
- 'label' => __( 'Autoplay', 'elementor' ),
- 'type' => Controls_Manager::SWITCHER,
- ]
- );
- $this->add_control(
- 'sc_buying',
- [
- 'label' => __( 'Buy Button', 'elementor' ),
- 'type' => Controls_Manager::SWITCHER,
- 'label_off' => __( 'Hide', 'elementor' ),
- 'label_on' => __( 'Show', 'elementor' ),
- 'default' => 'yes',
- ]
- );
- $this->add_control(
- 'sc_liking',
- [
- 'label' => __( 'Like Button', 'elementor' ),
- 'type' => Controls_Manager::SWITCHER,
- 'label_off' => __( 'Hide', 'elementor' ),
- 'label_on' => __( 'Show', 'elementor' ),
- 'default' => 'yes',
- ]
- );
- $this->add_control(
- 'sc_download',
- [
- 'label' => __( 'Download Button', 'elementor' ),
- 'type' => Controls_Manager::SWITCHER,
- 'label_off' => __( 'Hide', 'elementor' ),
- 'label_on' => __( 'Show', 'elementor' ),
- 'default' => 'yes',
- ]
- );
- $this->add_control(
- 'sc_show_artwork',
- [
- 'label' => __( 'Artwork', 'elementor' ),
- 'type' => Controls_Manager::SWITCHER,
- 'label_off' => __( 'Hide', 'elementor' ),
- 'label_on' => __( 'Show', 'elementor' ),
- 'default' => 'yes',
- 'condition' => [
- 'visual' => 'no',
- ],
- ]
- );
- $this->add_control(
- 'sc_sharing',
- [
- 'label' => __( 'Share Button', 'elementor' ),
- 'type' => Controls_Manager::SWITCHER,
- 'label_off' => __( 'Hide', 'elementor' ),
- 'label_on' => __( 'Show', 'elementor' ),
- 'default' => 'yes',
- ]
- );
- $this->add_control(
- 'sc_show_comments',
- [
- 'label' => __( 'Comments', 'elementor' ),
- 'type' => Controls_Manager::SWITCHER,
- 'label_off' => __( 'Hide', 'elementor' ),
- 'label_on' => __( 'Show', 'elementor' ),
- 'default' => 'yes',
- ]
- );
- $this->add_control(
- 'sc_show_playcount',
- [
- 'label' => __( 'Play Counts', 'elementor' ),
- 'type' => Controls_Manager::SWITCHER,
- 'label_off' => __( 'Hide', 'elementor' ),
- 'label_on' => __( 'Show', 'elementor' ),
- 'default' => 'yes',
- ]
- );
- $this->add_control(
- 'sc_show_user',
- [
- 'label' => __( 'Username', 'elementor' ),
- 'type' => Controls_Manager::SWITCHER,
- 'label_off' => __( 'Hide', 'elementor' ),
- 'label_on' => __( 'Show', 'elementor' ),
- 'default' => 'yes',
- ]
- );
- $this->add_control(
- 'sc_color',
- [
- 'label' => __( 'Controls Color', 'elementor' ),
- 'type' => Controls_Manager::COLOR,
- ]
- );
- $this->add_control(
- 'view',
- [
- 'label' => __( 'View', 'elementor' ),
- 'type' => Controls_Manager::HIDDEN,
- 'default' => 'soundcloud',
- ]
- );
- $this->end_controls_section();
- }
- /**
- * Render audio widget output on the frontend.
- *
- * Written in PHP and used to generate the final HTML.
- *
- * @since 1.0.0
- * @access protected
- */
- protected function render() {
- $settings = $this->get_settings_for_display();
- if ( empty( $settings['link'] ) ) {
- return;
- }
- $this->_current_instance = $settings;
- add_filter( 'oembed_result', [ $this, 'filter_oembed_result' ], 50, 3 );
- $video_html = wp_oembed_get( $settings['link']['url'], wp_embed_defaults() );
- remove_filter( 'oembed_result', [ $this, 'filter_oembed_result' ], 50 );
- if ( $video_html ) : ?>
- <div class="elementor-soundcloud-wrapper">
- <?php echo $video_html; ?>
- </div>
- <?php
- endif;
- }
- /**
- * Filter audio widget oEmbed results.
- *
- * Written in PHP and used to generate the final HTML.
- *
- * @since 1.0.0
- * @access public
- *
- * @param string $html The HTML returned by the oEmbed provider.
- *
- * @return string Filtered audio widget oEmbed HTML.
- */
- public function filter_oembed_result( $html ) {
- $param_keys = [
- 'auto_play',
- 'buying',
- 'liking',
- 'download',
- 'sharing',
- 'show_comments',
- 'show_playcount',
- 'show_user',
- 'show_artwork',
- ];
- $params = [];
- foreach ( $param_keys as $param_key ) {
- $params[ $param_key ] = 'yes' === $this->_current_instance[ 'sc_' . $param_key ] ? 'true' : 'false';
- }
- $params['color'] = str_replace( '#', '', $this->_current_instance['sc_color'] );
- preg_match( '/<iframe.*src=\"(.*)\".*><\/iframe>/isU', $html, $matches );
- $url = esc_url( add_query_arg( $params, $matches[1] ) );
- $visual = 'yes' === $this->_current_instance['visual'] ? 'true' : 'false';
- $html = str_replace( [ $matches[1], 'visual=true' ], [ $url, 'visual=' . $visual ], $html );
- if ( 'false' === $visual ) {
- $html = str_replace( 'height="400"', 'height="200"', $html );
- }
- return $html;
- }
- /**
- * Render audio widget output in the editor.
- *
- * Written as a Backbone JavaScript template and used to generate the live preview.
- *
- * @since 1.0.0
- * @access protected
- */
- protected function _content_template() {}
- }
|