AlkantarClanX12
Current Path : /home/thanudqk/128shen.com/wp-content/plugins/embedpress/EmbedPress/Providers/ |
Current File : /home/thanudqk/128shen.com/wp-content/plugins/embedpress/EmbedPress/Providers/Spreaker.php |
<?php namespace EmbedPress\Providers; use Embera\Provider\ProviderAdapter; use Embera\Provider\ProviderInterface; use Embera\Url; (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed."); /** * Entity responsible to support Spreaker embeds. * * @package EmbedPress * @subpackage EmbedPress/Providers * @author EmbedPress <help@embedpress.com> * @copyright Copyright (C) 2023 WPDeveloper. All rights reserved. * @license GPLv3 or later * @since 1.0.0 */ class Spreaker extends ProviderAdapter implements ProviderInterface { /** inline {@inheritdoc} */ protected static $hosts = ["spreaker.com"]; /** * Method that verifies if the embed URL belongs to Spreaker. * * @param Url $url * @return boolean * @since 1.0.0 * */ protected $allowedParams = [ 'maxwidth', 'maxheight', 'theme', 'color', 'coverImageUrl', 'playlist', 'playlistContinuous', 'playlistLoop', 'playlistAutoupdate', 'chaptersImage', 'episodeImagePosition', 'hideLikes', 'hideComments', 'hideSharing', 'hideLogo', 'hideEpisodeDescription', 'hidePlaylistDescriptions', 'hidePlaylistImages', 'hideDownload', ]; protected $httpsSupport = true; public function getAllowedParams() { return $this->allowedParams; } public function validateUrl(Url $url) { return (bool) (preg_match('~spreaker\.com/show/([^/]+)~i', (string) $url) || preg_match('~spreaker\.com/user/([^/]+)(/[^/]+)?~i', (string) $url) || preg_match('~spreaker\.com/podcast/([^/]+)~i', (string) $url) || preg_match('~spreaker\.com/episode/([^/]+)(?:/.*)?~i', (string) $url)); } public function validateSpreaker($url) { return (bool) (preg_match('~spreaker\.com/show/([^/]+)~i', (string) $url) || preg_match('~spreaker\.com/user/([^/]+)(/[^/]+)?~i', (string) $url) || preg_match('~spreaker\.com/podcast/([^/]+)~i', (string) $url) || preg_match('~spreaker\.com/episode/([^/]+)(?:/.*)?~i', (string) $url)); } public function extractPodcastId($url) { preg_match("/(\d+)$/", $url, $matches); if (isset($matches[1])) { return $matches[1]; // Return the ID } return null; } /** * This method fakes an Oembed response. * * @since 1.0.0 * * @return array */ public function getBooleanParam($param, $default = false) { return isset($param) && is_string($param) && ($param == 'true' || $param == 'yes') ? 'true' : ($default ? 'true' : 'false'); } public function getStringParam($param, $default = '') { return isset($param) && is_string($param) ? $param : $default; } public function fakeResponse() { $src_url = urldecode($this->url); $params = $this->getParams(); $query_param = [ 'theme' => isset($params['theme']) ? $this->getStringParam($params['theme'], 'light') : 'light', 'chapters-image' => isset($params['chaptersImage']) ? $this->getBooleanParam($params['chaptersImage']) : false, 'episode_image_position' => isset($params['episodeImagePosition']) ? $this->getStringParam($params['episodeImagePosition'], 'right') : 'right', 'hide-likes' => isset($params['hideLikes']) ? $this->getBooleanParam($params['hideLikes']) : false, 'hide-comments' => isset($params['hideComments']) ? $this->getBooleanParam($params['hideComments']) : false, 'hide-sharing' => isset($params['hideSharing']) ? $this->getBooleanParam($params['hideSharing']) : false, 'hide-logo' => isset($params['hideLogo']) ? $this->getBooleanParam($params['hideLogo']) : false, 'hide-episode-description' => isset($params['hideEpisodeDescription']) ? $this->getBooleanParam($params['hideEpisodeDescription']) : false, 'hide-download' => isset($params['hideDownload']) ? $this->getBooleanParam($params['hideDownload']) : false, ]; if (strpos($src_url, 'spreaker.com/podcast/') !== false) { $query_param['playlist'] = isset($params['playlist']) ? $this->getBooleanParam($params['playlist']) : false; $query_param['playlist-continuous'] = isset($params['playlistContinuous']) ? $this->getBooleanParam($params['playlistContinuous']) : false; $query_param['playlist-loop'] = isset($params['playlistLoop']) ? $this->getBooleanParam($params['playlistLoop']) : false; $query_param['playlist-autoupdate'] = isset($params['playlistAutoupdate']) ? $this->getBooleanParam($params['playlistAutoupdate']) : false; $query_param['hide-playlist-descriptions'] = isset($params['hidePlaylistDescriptions']) ? $this->getBooleanParam($params['hidePlaylistDescriptions']) : false; $query_param['hide-playlist-images'] = isset($params['hidePlaylistImages']) ? $this->getBooleanParam($params['hidePlaylistImages']) : false; } if (!empty($params['color']) && is_string($params['color'])) { $query_param['color'] = $params['color']; } if (!empty($params['coverImageUrl']) && is_string($params['coverImageUrl'])) { $query_param['cover_image_url'] = $params['coverImageUrl']; } $query_string = http_build_query($query_param); // Check if the url is already converted to the embed format if ($this->validateSpreaker($src_url) && strpos($src_url, 'spreaker.com/podcast/')) { $iframeSrc = 'https://widget.spreaker.com/player?show_id=' . $this->extractPodcastId($src_url) . '&' . $query_string; } else if ($this->validateSpreaker($src_url) && strpos($src_url, 'spreaker.com/episode/')) { $iframeSrc = 'https://widget.spreaker.com/player?episode_id=' . $this->extractPodcastId($src_url) . '&' . $query_string; } else { return []; } $width = isset($this->config['maxwidth']) ? $this->config['maxwidth'] : 600; $height = isset($this->config['maxheight']) ? $this->config['maxheight'] : 350; return [ 'type' => 'rich', 'provider_name' => 'Spreaker', 'provider_url' => 'https://spreaker.com', 'title' => 'Unknown title', 'html' => '<iframe title="This is title" width="' . esc_attr($width) . '" height="' . esc_attr($height) . '" src="' . esc_url($iframeSrc) . '" ></iframe>', ]; } /** inline @inheritDoc */ public function modifyResponse(array $response = []) { return $this->fakeResponse(); } }