Your IP : 216.73.216.61


Current Path : /home/w/u/e/wuectly/www/plugins/content/sudesign_audio/
Upload File :
Current File : /home/w/u/e/wuectly/www/plugins/content/sudesign_audio/sudesign_audio.php

<?php defined('_JEXEC') or die;
/**
 * @package Plugin Content - Simple Audio Shortcode for Joomla! 1.7.x - 3.x - 4.alpha
 * @author SUDesign
 * @version 1.5
 * @copyright (C) 2016 - SUDesign - All Rights Reserved.
 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
 * @support http://www.sudesign.fr/contact.html
 **/

class plgContentSudesign_audio extends JPlugin
{
	public function __construct(& $subject, $config)
	{
		parent::__construct($subject, $config);
	}

	private function str2bool( $str )
	{
		return in_array( strtolower(trim($str)) , array(1,'yes','on', 'true', 'oui') );
	}

	public function onContentPrepare($context, &$row, $params, $page = 0)
	{
		if (preg_match_all('/(?P<tag>\[audio(?P<params>[^\]]+)\])/isU',$row->text,$matchs))
		{
			if ($this->params->get('inc_lib') == 1)
			{
				$document = JFactory::getDocument();

				$v = new Jversion();
				if($v->isCompatible('3'))
					JHtml::_('jquery.framework');

				if ($this->params->get('inc_jquery') == 1)
					$document->addScript(JURI::root().'plugins/content/sudesign_audio/lib/jquery-3.2.1.min.js');

				$document->addScript(JURI::root().'plugins/content/sudesign_audio/lib/mediaelement-and-player.min.js');
				$document->addStyleSheet(JURI::root().'plugins/content/sudesign_audio/lib/mediaelementplayer.min.css');

				$default_width = (int)$this->params->get('default_width') - 183;
				if( $default_width > 20)
					$document->addStyleDeclaration('.mejs-controls div.mejs-time-rail{width:'.$default_width.'px;} .mejs-controls .mejs-time-rail .mejs-time-total{width:'.($default_width-10).'px;}');
			}

			foreach($matchs['tag'] as $key => $tag)
			{
				$params = array(
					'src'		=> '',
					'onError'	=> 'shortcodeAudioOnerror(event,this)',
					'mp3'		=> '',
					'loop'		=> 'off',
					'autoplay'	=> 'off',
					'showvolume'=> 'on',
					'controls'	=> 'controls',
					'type'		=> '',
					'background'=> '',
					'btcolor'	=> '',
					'preload'	=> 'none',
					'style'		=> '',
					'hidden'	=> '',
				);

				if (preg_match_all('/(?P<param>[^\s]+)\=\"(?P<value>[^\"]+)\"/isU',$matchs['params'][$key], $attrs))
				{
					foreach($attrs['param'] as $keyp => $param)
					{
						$params[$param] = trim($attrs['value'][$keyp]);
					}
				}

				if (!empty($params['mp3']))
				{
					$params['src'] = $params['mp3'];
					unset($params['mp3']);
				}

				if ($this->str2bool($params['hidden']))
					$params['style'] = 'display:none;'.$params['style'];

				$css = array();
				$params['class'] = 'style-'.substr(md5(http_build_query($params)), 10);

				if (!empty($params['background']))
				{
					$css[] = '.'.$params['class'].' .mejs-controls{background:'.$params['background'].'}';
					unset($params['background']);
				}
				
				if (!empty($params['btcolor']))
				{
					if ( in_array($params['btcolor'], array('black','red','green','blue')))
						$css[] = '.'.$params['class'].' .mejs-button button{background-image:url('.JURI::root().'plugins/content/sudesign_audio/lib/controls-'.$params['btcolor'].'.svg)}';
					
					unset($params['btcolor']);
				}
				
				if (isset($params['txtcolor']))
				{
					$css[] = '.'.$params['class'].' .mejs-controls .mejs-time span{color:'.$params['txtcolor'].'!important}';
					unset($params['txtcolor']);
				}
				
				if (!empty($params['showvolume']))
				{
					if(!$this->str2bool($params['showvolume']))
					{
						$css[] = '.'.$params['class'].' .mejs-button.mejs-volume-button{display:none}';
						$css[] = '.'.$params['class'].' .mejs-horizontal-volume-slider{display:none!important}';
					}
					unset($params['showvolume']);
				}

				if (!empty($params['style']))
				{
					$css[] = '.'.$params['class'].'{'.$params['style'].'}';
				}

				if (empty($params['type']) && !empty($params['src']))
				{
					$ext = strtolower(trim(pathinfo($params['src'], PATHINFO_EXTENSION)));
					$params['type'] = 'audio/'.$ext;
				}

				$attrs = array();

				foreach($params as $attr => $value)
					if (!empty($value))
						if (in_array( strtolower(trim($attr)) , array('loop','autoplay')))
							$attrs[] = $this->str2bool($value) ? $attr : '';
						else
							$attrs[] = $attr.'="'.($this->str2bool($value) ? 'true': $value).'"';

				$fallback = '<a href="'.$params['src'].'" target="_blank">'.parse_url($params['src'],PHP_URL_HOST).'</a>';

				$html = '<audio '.implode(' ',$attrs).'>'.$fallback.'</audio>'.(empty($css)?'':'<style type="text/css">'.implode("\n",$css).'</style>');

				$row->text = str_replace($tag, $html, $row->text);
			}

			$row->text = '<!--[if lt IE 9]><script>document.createElement("audio");</script><![endif]-->'.str_replace('[/audio]','',$row->text);
		}

		return true;
	}
}