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 / GoogleMaps.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
GoogleMaps.php
99 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 GoogleMaps 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 GoogleMaps extends ProviderAdapter implements ProviderInterface
22 {
23 /** inline {@inheritdoc} */
24 protected static $hosts = ["google.com", "google.com.*", "maps.google.com", "goo.gl", "google.co.*"];
25 /**
26 * Method that verifies if the embed URL belongs to GoogleMaps.
27 *
28 * @param Url $url
29 * @return boolean
30 * @since 1.0.0
31 *
32 */
33 public function validateUrl(Url $url)
34 {
35 return (bool) preg_match('~http[s]?:\/\/(?:(?:(?:www\.|maps\.)?(?:google\.com?))|(?:goo\.gl))(?:\.[a-z]{2})?\/(?:maps\/)?(?:place\/)?(?:[a-z0-9\/%+\-_]*)?([a-z0-9\/%,+\-_=!:@\.&*\$#?\']*)~i',
36 (string) $url);
37 }
38
39 public function validateGoogleMapUrl($url)
40 {
41 return (bool) preg_match('~http[s]?:\/\/(?:(?:(?:www\.|maps\.)?(?:google\.com?))|(?:goo\.gl))(?:\.[a-z]{2})?\/(?:maps\/)?(?:place\/)?(?:[a-z0-9\/%+\-_]*)?([a-z0-9\/%,+\-_=!:@\.&*\$#?\']*)~i',
42 (string) $url);
43 }
44
45 /**
46 * This method fakes an Oembed response.
47 *
48 * @since 1.0.0
49 *
50 * @return array
51 */
52 public function fakeResponse()
53 {
54 $src_url = urldecode($this->url);
55
56 preg_match('/(?<=mid=).*$/', $src_url, $matches);
57
58 if (!empty($matches)) {
59 $mid = $matches[0].'&ehbc=2E312F';
60 }
61
62 // Check if the url is already converted to the embed format
63 if (preg_match('~(maps/embed|output=embed)~i', $src_url)) {
64 $iframeSrc = $src_url;
65 }
66 else {
67 // Extract coordinates and zoom from the url
68 if (preg_match('~(?:maps\/(?:place|(?:dir\/.+?))\/(.+)\/)?@(-?[0-9\.]+,-?[0-9\.]+).+,([0-9\.]+[a-z])~i', $src_url, $matches)) {
69 $place_name = str_replace("+"," ",$matches[1]);
70 $z = floatval( $matches[3]);
71 $iframeSrc = 'https://maps.google.com/maps?hl=en&ie=UTF8&ll=' . $matches[2] . '&spn=' . $matches[2] . '&q='.$place_name.'&t=m&z=' . round($z) . '&output=embed&iwloc';
72 }
73 else if ($this->validateGoogleMapUrl($src_url)){
74 $iframeSrc = 'https://www.google.com/maps/d/embed?mid='.$mid;
75 }
76 else {
77 return [];
78 }
79 }
80
81 $width = isset( $this->config['maxwidth']) ? $this->config['maxwidth']: 600;
82 $height = isset( $this->config['maxheight']) ? $this->config['maxheight']: 450;
83
84 return [
85 'type' => 'rich',
86 'provider_name' => 'Google Maps',
87 'provider_url' => 'https://maps.google.com',
88 'title' => 'Unknown title',
89 'html' => '<iframe title="" width="'.$width.'" height="'.$height.'" src="'.$iframeSrc.'" frameborder="0"></iframe>',
90 ];
91 }
92 /** inline @inheritDoc */
93 public function modifyResponse( array $response = [])
94 {
95 return $this->fakeResponse();
96 }
97
98 }
99