PluginProbe ʕ •ᴥ•ʔ
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more / 2.5.4
EmbedPress – PDF Embedder, Embed PDF viewer, YouTube Videos, 3D FlipBook, Social feeds & more v2.5.4
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
Giphy.php 6 years ago GoogleDocs.php 6 years ago GoogleMaps.php 6 years ago Twitch.php 6 years ago index.html 7 years ago
GoogleDocs.php
120 lines
1 <?php
2
3 namespace EmbedPress\Providers;
4
5 use Embera\Adapters\Service as EmberaService;
6
7 (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed.");
8
9 /**
10 * Entity responsible to support GoogleDocs embeds.
11 *
12 * @package EmbedPress
13 * @subpackage EmbedPress/Providers
14 * @author EmbedPress <help@embedpress.com>
15 * @copyright Copyright (C) 2020 WPDeveloper. All rights reserved.
16 * @license GPLv3 or later
17 * @since 1.0.0
18 */
19 class GoogleDocs extends EmberaService
20 {
21 /**
22 * Method that verifies if the embed URL belongs to GoogleDocs.
23 *
24 * @since 1.0.0
25 *
26 * @return boolean
27 */
28 public function validateUrl()
29 {
30 return preg_match('~http[s]?:\/\/((?:www\.)?docs\.google\.com\/(?:.*/)?(?:document|presentation|spreadsheets|forms|drawings)\/[a-z0-9\/\?=_\-\.\,&%\$#\@\!\+]*)~i',
31 $this->url);
32 }
33
34 /**
35 * This method fakes an Oembed response.
36 *
37 * @since 1.0.0
38 *
39 * @return array
40 */
41 public function fakeResponse()
42 {
43 $iframeSrc = html_entity_decode($this->url);
44
45 // Check the type of document
46 preg_match('~google\.com/(?:.+/)?(document|presentation|spreadsheets|forms|drawings)/~i', $iframeSrc, $matches);
47 $type = $matches[1];
48
49 switch ($type) {
50 case 'document':
51 // Check if the url still doesn't have the embedded param, and add if needed
52 if ( ! preg_match('~([?&])embedded=true~i', $iframeSrc, $matches)) {
53 if (substr_count($iframeSrc, '?')) {
54 $iframeSrc .= '&embedded=true';
55 } else {
56 $iframeSrc .= '?embedded=true';
57 }
58 }
59 break;
60
61 case 'presentation':
62 // Convert the /pub to /embed if needed
63 if (preg_match('~/pub\?~i', $iframeSrc)) {
64 $iframeSrc = str_replace('/pub?', '/embed?', $iframeSrc);
65 }
66 break;
67
68 case 'spreadsheets':
69 if (substr_count($iframeSrc, '?')) {
70 $query = explode('?', $iframeSrc);
71 $query = $query[1];
72 $query = explode('&', $query);
73
74 if ( ! empty($query)) {
75 $hasWidgetParam = false;
76 $hasHeadersParam = false;
77
78 foreach ($query as $param) {
79 if (substr_count($param, 'widget=')) {
80 $hasWidgetParam = true;
81 } elseif (substr_count($param, 'headers=')) {
82 $hasHeadersParam = true;
83 }
84 }
85
86 if ( ! $hasWidgetParam) {
87 $iframeSrc .= '&widget=true';
88 }
89
90 if ( ! $hasHeadersParam) {
91 $iframeSrc .= '&headers=false';
92 }
93 }
94 } else {
95 $iframeSrc .= '?widget=true&headers=false';
96 }
97 break;
98
99 case 'forms':
100 case 'drawings':
101 break;
102 }
103
104 if ($type !== 'drawings') {
105 $html = '<iframe src="' . $iframeSrc . '" frameborder="0" width="600" height="450" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>';
106 } else {
107 $html = '<img src="' . $iframeSrc . '" width="960" height="720" />';
108 }
109
110 return [
111 'type' => 'rich',
112 'provider_name' => 'Google Docs',
113 'provider_url' => 'https://docs.google.com',
114 'title' => 'Unknown title',
115 'html' => $html,
116 'wrapper_class' => 'ose-google-docs-' . $type,
117 ];
118 }
119 }
120