PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 3.9.0
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v3.9.0
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 / GoogleDocs.php
embedpress / EmbedPress / Providers Last commit date
Boomplay.php 5 years ago Calendly.php 2 years ago Giphy.php 2 years ago GitHub.php 2 years ago GoogleDocs.php 2 years ago GoogleDrive.php 2 years ago GoogleMaps.php 2 years ago Gumroad.php 2 years ago NRKRadio.php 2 years ago OpenSea.php 3 years ago SelfHosted.php 2 years ago Twitch.php 2 years ago Wrapper.php 2 years ago Youtube.php 2 years ago index.html 7 years ago
GoogleDocs.php
134 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 GoogleDocs 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 GoogleDocs extends ProviderAdapter implements ProviderInterface
22 {
23 /**
24 * Method that verifies if the embed URL belongs to GoogleDocs.
25 *
26 * @param Url $url
27 * @return boolean
28 * @since 1.0.0
29 *
30 */
31 public function validateUrl(Url $url)
32 {
33 return (bool) preg_match('~http[s]?:\/\/((?:www\.)?docs\.google\.com\/(?:.*/)?(?:document|presentation|spreadsheets|forms|drawings)\/[a-z0-9\/\?=_\-\.\,&%\$#\@\!\+]*)~i',
34 $url);
35 }
36
37 /**
38 * This method fakes an Oembed response.
39 *
40 * @since 1.0.0
41 *
42 * @return array
43 */
44 public function fakeResponse()
45 {
46 $iframeSrc = html_entity_decode($this->url);
47
48 // Check the type of document
49 preg_match('~google\.com/(?:.+/)?(document|presentation|spreadsheets|forms|drawings)/~i', $iframeSrc, $matches);
50 $type = $matches[1];
51
52 switch ($type) {
53 case 'document':
54 // Check if the url still doesn't have the embedded param, and add if needed
55 if ( ! preg_match('~([?&])embedded=true~i', $iframeSrc, $matches)) {
56 if (substr_count($iframeSrc, '?')) {
57 $iframeSrc .= '&embedded=true';
58 } else {
59 $iframeSrc .= '?embedded=true';
60 }
61 }
62 break;
63
64 case 'presentation':
65 // Convert the /pub to /embed if needed
66 if (preg_match('~/pub\?~i', $iframeSrc)) {
67 $iframeSrc = str_replace('/pub?', '/embed?', $iframeSrc);
68 }
69 break;
70
71 case 'spreadsheets':
72 if (substr_count($iframeSrc, '?')) {
73 $query = explode('?', $iframeSrc);
74 $query = $query[1];
75 $query = explode('&', $query);
76
77 if ( ! empty($query)) {
78 $hasWidgetParam = false;
79 $hasHeadersParam = false;
80
81 foreach ($query as $param) {
82 if (substr_count($param, 'widget=')) {
83 $hasWidgetParam = true;
84 } elseif (substr_count($param, 'headers=')) {
85 $hasHeadersParam = true;
86 }
87 }
88
89 if ( ! $hasWidgetParam) {
90 $iframeSrc .= '&widget=true';
91 }
92
93 if ( ! $hasHeadersParam) {
94 $iframeSrc .= '&headers=false';
95 }
96 }
97 } else {
98 $iframeSrc .= '?widget=true&headers=false';
99 }
100 break;
101
102 case 'forms':
103 case 'drawings':
104 break;
105 }
106
107
108 $width = isset( $this->config['maxwidth']) ? $this->config['maxwidth']: 600;
109 $height = isset( $this->config['maxheight']) ? $this->config['maxheight']: 450;
110 if ($type !== 'drawings') {
111 $html = '<iframe src="' . $iframeSrc . '" frameborder="0" width="'.$width.'" height="'.$height.'" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>';
112 } else {
113 $width = isset( $this->config['maxwidth']) ? $this->config['maxwidth']: 960;
114 $height = isset( $this->config['maxheight']) ? $this->config['maxheight']: 720;
115 $html = '<img src="' . $iframeSrc . '" width="'.$width.'" height="'.$height.'" />';
116 }
117
118 return [
119 'type' => 'rich',
120 'provider_name' => 'Google Docs',
121 'provider_url' => 'https://docs.google.com',
122 'title' => 'Unknown title',
123 'html' => $html,
124 'wrapper_class' => 'ose-google-docs-' . $type,
125 ];
126 }
127
128 /** inline @inheritDoc */
129 public function modifyResponse( array $response = [])
130 {
131 return $this->fakeResponse();
132 }
133 }
134