PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / trunk
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more vtrunk
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 / OneDrive.php
embedpress / EmbedPress / Providers Last commit date
TemplateLayouts 3 weeks 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 GettyImages.php 9 months ago Giphy.php 2 years ago GitHub.php 2 years ago GoogleCalendar.php 7 months ago GoogleDocs.php 2 years ago GoogleDrive.php 2 years ago GoogleMaps.php 2 years ago GooglePhotos.php 3 months ago Gumroad.php 2 years ago InstagramFeed.php 3 weeks ago LinkedIn.php 2 years ago Meetup.php 5 months ago NRKRadio.php 2 years ago OneDrive.php 10 months ago OpenSea.php 9 months ago SelfHosted.php 1 month ago Spreaker.php 1 year ago TikTok.php 2 years ago Twitch.php 2 years ago Wistia.php 3 months ago Wrapper.php 2 years ago X.php 2 years ago Youtube.php 3 weeks ago index.html 7 years ago
OneDrive.php
131 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 * OneDrive provider for EmbedPress.
13 *
14 * @package EmbedPress
15 * @subpackage EmbedPress/Providers
16 * @author EmbedPress
17 * @license GPLv3 or later
18 * @since 1.0.0
19 */
20 class OneDrive extends ProviderAdapter implements ProviderInterface
21 {
22 protected static $hosts = ["onedrive.live.com", "1drv.ms"];
23
24 /**
25 * Validates if the URL belongs to OneDrive.
26 *
27 * @param Url $url
28 * @return bool
29 */
30 public function validateUrl(Url $url)
31 {
32 return (bool) preg_match(
33 '~https?:\/\/(?:onedrive\.live\.com|1drv\.ms)\/(?:embed|redir|w\/c)?\/?(?:[^\/]*\/)*([^\/]+)~i',
34 (string) $url
35 );
36 }
37
38
39 /**
40 * Determines the appropriate iframe src for the given URL.
41 *
42 * @param string $url
43 * @return string|null
44 */
45 private function getIframeSrc(string $url): ?string
46 {
47 // CASE 1: All 1drv.ms embed styles — including /w/s!abc123 or /w/c/abc123 or /p/c/x/y
48 if (preg_match('~https?://1drv\.ms/[a-z]+/[a-z0-9!_-]+(?:/[^?\s]*)?~i', $url)) {
49 return $this->appendEmbedParam($url);
50 }
51
52 // CASE 2: Short link like /w/abc123 → convert to /w/c/abc123
53 if (preg_match('~https?://1drv\.ms/([a-z]+)/([a-zA-Z0-9_-]+)$~i', $url, $matches)) {
54 return "https://1drv.ms/{$matches[1]}/c/{$matches[2]}?embed=1&em=2";
55 }
56
57 // CASE 3: SharePoint or OneDrive full link
58 if (preg_match('~https?://(?:onedrive\.live\.com|[\w.-]+\.sharepoint\.com)/.*?(?:resid=|id=|file/)([^&?/]+)(?:&authkey=([^&]+))?~i', $url, $matches)) {
59 $fileId = $matches[1];
60 $authKey = $matches[2] ?? '';
61 $iframeSrc = "https://1drv.ms/w/c/$fileId";
62
63 if ($authKey) {
64 $iframeSrc .= "?authkey=$authKey";
65 }
66
67 return $this->appendEmbedParam($iframeSrc);
68 }
69
70 return null;
71 }
72
73
74 /**
75 * Appends ?em=2 or &em=2 to a URL if not already present.
76 *
77 * @param string $url
78 * @return string
79 */
80 private function appendEmbedParam(string $url): string
81 {
82 if (strpos($url, 'em=') !== false) {
83 return $url;
84 }
85
86 return $url . (strpos($url, '?') === false ? '?em=2' : '&em=2');
87 }
88
89 /**
90 * Generates a fake oEmbed response.
91 *
92 * @return array
93 */
94 public function fakeResponse()
95 {
96 $srcUrl = urldecode($this->url);
97 $iframeSrc = $this->getIframeSrc($srcUrl);
98
99 if (!$iframeSrc) {
100 return [];
101 }
102
103 $width = $this->config['maxwidth'] ?? 600;
104 $height = $this->config['maxheight'] ?? 450;
105
106 return [
107 'type' => 'rich',
108 'provider_name' => 'OneDrive',
109 'provider_url' => 'https://onedrive.live.com',
110 'title' => 'OneDrive Document',
111 'html' => sprintf(
112 '<iframe title="OneDrive Document" width="%d" height="%d" src="%s" frameborder="0" scrolling="no"></iframe>',
113 esc_attr($width),
114 esc_attr($height),
115 esc_url($iframeSrc)
116 ),
117 ];
118 }
119
120 /**
121 * Fallback for modifyResponse, returns fakeResponse.
122 *
123 * @param array $response
124 * @return array
125 */
126 public function modifyResponse(array $response = [])
127 {
128 return $this->fakeResponse();
129 }
130 }
131