AlkantarClanX12
Current Path : /home/thanudqk/128shen.com/wp-content/plugins/embedpress/EmbedPress/Providers/ |
Current File : /home/thanudqk/128shen.com/wp-content/plugins/embedpress/EmbedPress/Providers/GoogleDocs.php |
<?php namespace EmbedPress\Providers; use Embera\Provider\ProviderAdapter; use Embera\Provider\ProviderInterface; use Embera\Url; (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed."); /** * Entity responsible to support GoogleDocs embeds. * * @package EmbedPress * @subpackage EmbedPress/Providers * @author EmbedPress <help@embedpress.com> * @copyright Copyright (C) 2023 WPDeveloper. All rights reserved. * @license GPLv3 or later * @since 1.0.0 */ class GoogleDocs extends ProviderAdapter implements ProviderInterface { /** * Method that verifies if the embed URL belongs to GoogleDocs. * * @param Url $url * @return boolean * @since 1.0.0 * */ public function validateUrl(Url $url) { return (bool) preg_match('~http[s]?:\/\/((?:www\.)?docs\.google\.com\/(?:.*/)?(?:document|presentation|spreadsheets|forms|drawings)\/[a-z0-9\/\?=_\-\.\,&%\$#\@\!\+]*)~i', $url); } /** * This method fakes an Oembed response. * * @since 1.0.0 * * @return array */ public function fakeResponse() { $iframeSrc = html_entity_decode($this->url); // Check the type of document preg_match('~google\.com/(?:.+/)?(document|presentation|spreadsheets|forms|drawings)/~i', $iframeSrc, $matches); $type = $matches[1]; switch ($type) { case 'document': // Check if the url still doesn't have the embedded param, and add if needed if ( ! preg_match('~([?&])embedded=true~i', $iframeSrc, $matches)) { if (substr_count($iframeSrc, '?')) { $iframeSrc .= '&embedded=true'; } else { $iframeSrc .= '?embedded=true'; } } break; case 'presentation': // Convert the /pub to /embed if needed if (preg_match('~/pub\?~i', $iframeSrc)) { $iframeSrc = str_replace('/pub?', '/embed?', $iframeSrc); } break; case 'spreadsheets': if (substr_count($iframeSrc, '?')) { $query = explode('?', $iframeSrc); $query = $query[1]; $query = explode('&', $query); if ( ! empty($query)) { $hasWidgetParam = false; $hasHeadersParam = false; foreach ($query as $param) { if (substr_count($param, 'widget=')) { $hasWidgetParam = true; } elseif (substr_count($param, 'headers=')) { $hasHeadersParam = true; } } if ( ! $hasWidgetParam) { $iframeSrc .= '&widget=true'; } if ( ! $hasHeadersParam) { $iframeSrc .= '&headers=false'; } } } else { $iframeSrc .= '?widget=true&headers=false'; } break; case 'forms': case 'drawings': break; } $width = isset( $this->config['maxwidth']) ? $this->config['maxwidth']: 600; $height = isset( $this->config['maxheight']) ? $this->config['maxheight']: 450; if ($type !== 'drawings') { $html = '<iframe src="' . esc_url($iframeSrc) . '" frameborder="0" width="'.$width.'" height="'.$height.'" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>'; } else { $width = isset( $this->config['maxwidth']) ? $this->config['maxwidth']: 960; $height = isset( $this->config['maxheight']) ? $this->config['maxheight']: 720; $html = '<img src="' . esc_url($iframeSrc) . '" width="'.esc_attr($width).'" height="'.esc_attr($height).'" />'; } return [ 'type' => 'rich', 'provider_name' => 'Google Docs', 'provider_url' => 'https://docs.google.com', 'title' => 'Unknown title', 'html' => $html, 'wrapper_class' => 'ose-google-docs-' . $type, ]; } /** inline @inheritDoc */ public function modifyResponse( array $response = []) { return $this->fakeResponse(); } }