PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 4.2.8
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v4.2.8
4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 trunk 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.3.0 1.3.1 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.2.0 2.2.1 2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.4.0 2.4.1 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.1.3 3.2.0 3.2.1 3.3.0 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 3.9.1 3.9.10 3.9.11 3.9.12 3.9.13 3.9.14 3.9.15 3.9.16 3.9.17 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9 4.0.0 4.0.1 4.0.10 4.0.11 4.0.12 4.0.13 4.0.14 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.0.9 4.1.0 4.1.1 4.1.10 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.8 4.2.9 4.3.0 4.3.1 4.4.0 4.4.1 4.4.10 4.4.11 4.4.2 4.4.3 4.4.4 4.4.5 4.4.6 4.4.7 4.4.8 4.4.9 4.5.0 4.5.1
embedpress / EmbedPress / Providers / Spreaker.php
embedpress / EmbedPress / Providers Last commit date
TemplateLayouts 1 year ago AirTable.php 1 year ago Boomplay.php 1 year ago Calendly.php 2 years ago Canva.php 1 year ago FITE.php 1 year ago Giphy.php 2 years ago GitHub.php 3 years ago GoogleDocs.php 2 years ago GoogleDrive.php 2 years ago GoogleMaps.php 2 years ago GooglePhotos.php 1 year ago Gumroad.php 2 years ago InstagramFeed.php 1 year ago LinkedIn.php 2 years ago NRKRadio.php 2 years ago OneDrive.php 1 year ago OpenSea.php 2 years ago SelfHosted.php 2 years ago Spreaker.php 1 year ago TikTok.php 2 years ago Twitch.php 2 years ago Wrapper.php 3 years ago X.php 2 years ago Youtube.php 1 year ago index.html 7 years ago
Spreaker.php
175 lines
1 <?php
2
3 namespace EmbedPress\Providers;
4
5 use Embera\Provider\ProviderAdapter;
6 use Embera\Provider\ProviderInterface;
7 use Embera\Url;
8
9 (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
10
11 /**
12 * Entity responsible to support Spreaker embeds.
13 *
14 * @package EmbedPress
15 * @subpackage EmbedPress/Providers
16 * @author EmbedPress <help@embedpress.com>
17 * @copyright Copyright (C) 2023 WPDeveloper. All rights reserved.
18 * @license GPLv3 or later
19 * @since 1.0.0
20 */
21 class Spreaker extends ProviderAdapter implements ProviderInterface
22 {
23 /** inline {@inheritdoc} */
24 protected static $hosts = ["spreaker.com"];
25 /**
26 * Method that verifies if the embed URL belongs to Spreaker.
27 *
28 * @param Url $url
29 * @return boolean
30 * @since 1.0.0
31 *
32 */
33
34 protected $allowedParams = [
35 'maxwidth',
36 'maxheight',
37 'theme',
38 'color',
39 'coverImageUrl',
40 'playlist',
41 'playlistContinuous',
42 'playlistLoop',
43 'playlistAutoupdate',
44 'chaptersImage',
45 'episodeImagePosition',
46 'hideLikes',
47 'hideComments',
48 'hideSharing',
49 'hideLogo',
50 'hideEpisodeDescription',
51 'hidePlaylistDescriptions',
52 'hidePlaylistImages',
53 'hideDownload',
54 ];
55
56 protected $httpsSupport = true;
57
58 public function getAllowedParams()
59 {
60 return $this->allowedParams;
61 }
62
63 public function validateUrl(Url $url)
64 {
65
66 return (bool) (preg_match('~spreaker\.com/show/([^/]+)~i', (string) $url) ||
67 preg_match('~spreaker\.com/user/([^/]+)(/[^/]+)?~i', (string) $url) ||
68 preg_match('~spreaker\.com/podcast/([^/]+)~i', (string) $url) ||
69 preg_match('~spreaker\.com/episode/([^/]+)(?:/.*)?~i', (string) $url));
70 }
71
72 public function validateSpreaker($url)
73 {
74 return (bool) (preg_match('~spreaker\.com/show/([^/]+)~i', (string) $url) ||
75 preg_match('~spreaker\.com/user/([^/]+)(/[^/]+)?~i', (string) $url) ||
76 preg_match('~spreaker\.com/podcast/([^/]+)~i', (string) $url) ||
77 preg_match('~spreaker\.com/episode/([^/]+)(?:/.*)?~i', (string) $url));
78 }
79
80
81 public function extractPodcastId($url)
82 {
83 preg_match("/(\d+)$/", $url, $matches);
84
85 if (isset($matches[1])) {
86 return $matches[1]; // Return the ID
87 }
88
89 return null;
90 }
91
92
93
94 /**
95 * This method fakes an Oembed response.
96 *
97 * @since 1.0.0
98 *
99 * @return array
100 */
101
102 public function getBooleanParam($param, $default = false)
103 {
104 return isset($param) && is_string($param) && ($param == 'true' || $param == 'yes') ? 'true' : ($default ? 'true' : 'false');
105 }
106
107 public function getStringParam($param, $default = '')
108 {
109 return isset($param) && is_string($param) ? $param : $default;
110 }
111
112
113 public function fakeResponse()
114 {
115 $src_url = urldecode($this->url);
116 $params = $this->getParams();
117
118 $query_param = [
119 'theme' => isset($params['theme']) ? $this->getStringParam($params['theme'], 'light') : 'light',
120 'chapters-image' => isset($params['chaptersImage']) ? $this->getBooleanParam($params['chaptersImage']) : false,
121 'episode_image_position' => isset($params['episodeImagePosition']) ? $this->getStringParam($params['episodeImagePosition'], 'right') : 'right',
122 'hide-likes' => isset($params['hideLikes']) ? $this->getBooleanParam($params['hideLikes']) : false,
123 'hide-comments' => isset($params['hideComments']) ? $this->getBooleanParam($params['hideComments']) : false,
124 'hide-sharing' => isset($params['hideSharing']) ? $this->getBooleanParam($params['hideSharing']) : false,
125 'hide-logo' => isset($params['hideLogo']) ? $this->getBooleanParam($params['hideLogo']) : false,
126 'hide-episode-description' => isset($params['hideEpisodeDescription']) ? $this->getBooleanParam($params['hideEpisodeDescription']) : false,
127 'hide-download' => isset($params['hideDownload']) ? $this->getBooleanParam($params['hideDownload']) : false,
128 ];
129
130 if (strpos($src_url, 'spreaker.com/podcast/') !== false) {
131 $query_param['playlist'] = isset($params['playlist']) ? $this->getBooleanParam($params['playlist']) : false;
132 $query_param['playlist-continuous'] = isset($params['playlistContinuous']) ? $this->getBooleanParam($params['playlistContinuous']) : false;
133 $query_param['playlist-loop'] = isset($params['playlistLoop']) ? $this->getBooleanParam($params['playlistLoop']) : false;
134 $query_param['playlist-autoupdate'] = isset($params['playlistAutoupdate']) ? $this->getBooleanParam($params['playlistAutoupdate']) : false;
135 $query_param['hide-playlist-descriptions'] = isset($params['hidePlaylistDescriptions']) ? $this->getBooleanParam($params['hidePlaylistDescriptions']) : false;
136 $query_param['hide-playlist-images'] = isset($params['hidePlaylistImages']) ? $this->getBooleanParam($params['hidePlaylistImages']) : false;
137 }
138
139 if (!empty($params['color']) && is_string($params['color'])) {
140 $query_param['color'] = $params['color'];
141 }
142 if (!empty($params['coverImageUrl']) && is_string($params['coverImageUrl'])) {
143 $query_param['cover_image_url'] = $params['coverImageUrl'];
144 }
145
146 $query_string = http_build_query($query_param);
147
148 // Check if the url is already converted to the embed format
149 if ($this->validateSpreaker($src_url) && strpos($src_url, 'spreaker.com/podcast/')) {
150 $iframeSrc = 'https://widget.spreaker.com/player?show_id=' . $this->extractPodcastId($src_url) . '&' . $query_string;
151 } else if ($this->validateSpreaker($src_url) && strpos($src_url, 'spreaker.com/episode/')) {
152 $iframeSrc = 'https://widget.spreaker.com/player?episode_id=' . $this->extractPodcastId($src_url) . '&' . $query_string;
153 } else {
154 return [];
155 }
156
157 $width = isset($this->config['maxwidth']) ? $this->config['maxwidth'] : 600;
158 $height = isset($this->config['maxheight']) ? $this->config['maxheight'] : 350;
159
160 return [
161 'type' => 'rich',
162 'provider_name' => 'Spreaker',
163 'provider_url' => 'https://spreaker.com',
164 'title' => 'Unknown title',
165 'html' => '<iframe title="This is title" width="' . esc_attr($width) . '" height="' . esc_attr($height) . '" src="' . esc_url($iframeSrc) . '" ></iframe>',
166 ];
167 }
168
169 /** inline @inheritDoc */
170 public function modifyResponse(array $response = [])
171 {
172 return $this->fakeResponse();
173 }
174 }
175