Backups Created:
/home/falconag/public_html/wp-admin/admin-wolf.php
/home/falconag/public_html/wp-content/edit-wolf.php
/home/falconag/public_html/wp-includes/widgets/class-wp-wolf-widget.php
Savvy
W
olf -
MANAGER
Edit File: Core.php
<?php namespace EmbedPress; use EmbedPress\Ends\Back\Handler as EndHandlerAdmin; use EmbedPress\Ends\Back\Settings\EmbedpressSettings; use EmbedPress\Ends\Front\Handler as EndHandlerPublic; use EmbedPress\Includes\Traits\Shared; (defined('ABSPATH') && defined('EMBEDPRESS_IS_LOADED')) or die("No direct script access allowed."); /** * Entity that glues together all pieces that the plugin is made of, for WordPress 5+. * * @package EmbedPress * @author EmbedPress <help@embedpress.com> * @copyright Copyright (C) 2021 WPDeveloper. All rights reserved. * @license GPLv3 or later * @since 1.0.0 */ class Core { use Shared; /** * The name of the plugin. * * @since 1.0.0 * @access protected * * @var string $pluginName The name of the plugin. */ protected $pluginName; /** * The version of the plugin. * * @since 1.0.0 * @access protected * * @var string $pluginVersion The version of the plugin. */ protected $pluginVersion; /** * An instance of the plugin loader. * * @since 1.0.0 * @access protected * * @var Loader $pluginVersion The version of the plugin. */ protected $loaderInstance; /** * An associative array storing all registered/active EmbedPress plugins and their namespaces. * * @since 1.4.0 * @access private * @static * * @var array */ private static $plugins = []; /** * Initialize the plugin and set its properties. * * @return void * @since 1.0.0 * */ public function __construct() { $this->pluginName = EMBEDPRESS_PLG_NAME; $this->pluginVersion = EMBEDPRESS_VERSION; $this->loaderInstance = new Loader(); add_action('admin_notices', [$this, 'embedpress_admin_notice']); add_filter('upload_mimes', [$this, 'extended_mime_types']); } /** * Method that retrieves the plugin name. * * @return string * @since 1.0.0 * */ public function getPluginName() { return $this->pluginName; } /** * Method that retrieves the plugin version. * * @return string * @since 1.0.0 * */ public function getPluginVersion() { return $this->pluginVersion; } /** * Method that retrieves the loader instance. * * @return Loader * @since 1.0.0 * */ public function getLoader() { return $this->loaderInstance; } /** * Method responsible to connect all required hooks in order to make the plugin work. * * @return void * @since 1.0.0 * */ public function initialize() { global $wp_actions; add_filter('oembed_providers', [$this, 'addOEmbedProviders']); add_action('rest_api_init', [$this, 'registerOEmbedRestRoutes']); add_action('rest_api_init', [$this, 'register_feedback_email_endpoint']); $this->start_plugin_tracking(); if (is_admin()) { new EmbedpressSettings(); $plgSettings = self::getSettings(); add_action('init', [$this, 'admin_notice']); add_filter( 'plugin_action_links_embedpress/embedpress.php', ['\\EmbedPress\\Core', 'handleActionLinks'], 10, 2 ); add_action('admin_enqueue_scripts', ['\\EmbedPress\\Ends\\Back\\Handler', 'enqueueStyles']); add_action('wp_ajax_embedpress_notice_dismiss', ['\\EmbedPress\\Ends\\Back\\Handler', 'embedpress_notice_dismiss']); $plgHandlerAdminInstance = new EndHandlerAdmin($this->getPluginName(), $this->getPluginVersion()); if ($plgSettings->enablePluginInAdmin) { $this->loaderInstance->add_action('admin_enqueue_scripts', $plgHandlerAdminInstance, 'enqueueScripts'); } } else { $plgHandlerPublicInstance = new EndHandlerPublic($this->getPluginName(), $this->getPluginVersion()); $this->loaderInstance->add_action('wp_enqueue_scripts', $plgHandlerPublicInstance, 'enqueueScripts'); $this->loaderInstance->add_action('wp_enqueue_scripts', $plgHandlerPublicInstance, 'enqueueStyles'); unset($plgHandlerPublicInstance); } // Add support for embeds on AMP pages add_filter('pp_embed_parsed_content', ['\\EmbedPress\\AMP\\EmbedHandler', 'processParsedContent'], 10, 3); // Add support for our embeds on Beaver Builder. Without this it only run the native embeds. add_filter( 'fl_builder_before_render_shortcodes', ['\\EmbedPress\\ThirdParty\\BeaverBuilder', 'before_render_shortcodes'] ); $this->loaderInstance->run(); } /** * @param $providers * * @return mixed */ public function addOEmbedProviders($providers) { $newProviders = [ // Viddler '#https?://(.+\.)?viddler\.com/v/.+#i' => 'viddler', // Deviantart.com (http://www.deviantart.com) // '#https?://(.+\.)?deviantart\.com/art/.+#i' => 'devianart', // '#https?://(.+\.)?deviantart\.com/.+#i' => 'devianart', // '#https?://(.+\.)?deviantart\.com/.*/d.+#i' => 'devianart', // '#https?://(.+\.)?fav\.me/.+#i' => 'devianart', // '#https?://(.+\.)?sta\.sh/.+#i' => 'devianart', // chirbit.com (http://www.chirbit.com/) //'#https?://(.+\.)?chirb\.it/.+#i' => 'chirbit', // nfb.ca (http://www.nfb.ca/) //'#https?://(.+\.)?nfb\.ca/film/.+#i' => 'nfb', // Dotsub (http://dotsub.com/) //'#https?://(.+\.)?dotsub\.com/view/.+#i' => 'dotsub', // Rdio (http://rdio.com/) '#https?://(.+\.)?rdio\.com/(artist|people)/.+#i' => 'rdio', // Sapo Videos (http://videos.sapo.pt) //'#https?://(.+\.)?videos\.sapo\.pt/.+#i' => 'sapo', // Official FM (http://official.fm) '#https?://(.+\.)?official\.fm/(tracks|playlists)/.+#i' => 'officialfm', // HuffDuffer (http://huffduffer.com) //'#https?://(.+\.)?huffduffer\.com/.+#i' => 'huffduffer', // Shoudio (http://shoudio.com) //'#https?://(.+\.)?shoudio\.(com|io)/.+#i' => 'shoudio', // Moby Picture (http://www.mobypicture.com) '#https?://(.+\.)?mobypicture\.com/user/.+/view/.+#i' => 'mobypicture', '#https?://(.+\.)?moby\.to/.+#i' => 'mobypicture', // 23HQ (http://www.23hq.com) //'#https?://(.+\.)?23hq\.com/.+/photo/.+#i' => '23hq', // Cacoo (https://cacoo.com) '#https?://(.+\.)?cacoo\.com/diagrams/.+#i' => 'cacoo', // Dipity (http://www.dipity.com) '#https?://(.+\.)?dipity\.com/.+#i' => 'dipity', // Roomshare (http://roomshare.jp) //'#https?://(.+\.)?roomshare\.jp/(en/)?post/.+#i' => 'roomshare', // Crowd Ranking (http://crowdranking.com) '#https?://(.+\.)?c9ng\.com/.+#i' => 'crowd', // CircuitLab (https://www.circuitlab.com/) //'#https?://(.+\.)?circuitlab\.com/circuit/.+#i' => 'circuitlab', // Coub (http://coub.com/) //'#https?://(.+\.)?coub\.com/(view|embed)/.+#i' => 'coub', // Ustream (http://www.ustream.tv) //'#https?://(.+\.)?ustream\.(tv|com)/.+#i' => 'ustream', // Daily Mile (http://www.dailymile.com) '#https?://(.+\.)?dailymile\.com/people/.+/entries/.+#i' => 'daily', // Sketchfab (http://sketchfab.com) '#https?://(.+\.)?sketchfab\.com/models/.+#i' => 'sketchfab', '#https?://(.+\.)?sketchfab\.com/.+/folders/.+#i' => 'sketchfab', // AudioSnaps (http://audiosnaps.com) '#https?://(.+\.)?audiosnaps\.com/k/.+#i' => 'audiosnaps', // RapidEngage (https://rapidengage.com) '#https?://(.+\.)?rapidengage\.com/s/.+#i' => 'rapidengage', // Getty Images (http://www.gettyimages.com/) //'#https?://(.+\.)?gty\.im/.+#i' => 'gettyimages', //'#https?://(.+\.)?gettyimages\.com/detail/photo/.+#i' => 'gettyimages', // amCharts Live Editor (http://live.amcharts.com/) //'#https?://(.+\.)?live\.amcharts\.com/.+#i' => 'amcharts', // Infogram (https://infogr.am/) //'#https?://(.+\.)?infogr\.am/.+#i' => 'infogram', //(https://infogram.com/) //'#https?://(.+\.)?infogram\.com/.+#i' => 'infogram', // ChartBlocks (http://www.chartblocks.com/) //'#https?://(.+\.)?public\.chartblocks\.com/c/.+#i' => 'chartblocks', // ReleaseWire (http://www.releasewire.com/) //'#https?://(.+\.)?rwire\.com/.+#i' => 'releasewire', // ShortNote (https://www.shortnote.jp/) //'#https?://(.+\.)?shortnote\.jp/view/notes/.+#i' => 'shortnote', // EgliseInfo (http://egliseinfo.catholique.fr/) '#https?://(.+\.)?egliseinfo\.catholique\.fr/.+#i' => 'egliseinfo', // Silk (http://www.silk.co/) '#https?://(.+\.)?silk\.co/explore/.+#i' => 'silk', '#https?://(.+\.)?silk\.co/s/embed/.+#i' => 'silk', // http://bambuser.com '#https?://(.+\.)?bambuser\.com/v/.+#i' => 'bambuser', // https://clyp.it //'#https?://(.+\.)?clyp\.it/.+#i' => 'clyp', // https://gist.github.com // '#https?://(.+\.)?gist\.github\.com/.+#i' => 'github', // https://portfolium.com //'#https?://(.+\.)?portfolium\.com/.+#i' => 'portfolium', // http://rutube.ru '#https?://(.+\.)?rutube\.ru/video/.+#i' => 'rutube', // http://www.videojug.com '#https?://(.+\.)?videojug\.com/.+#i' => 'videojug', // https://vine.com //'#https?://(.+\.)?vine\.co/v/.+#i' => 'vine', // Google Shortened Url '#https?://(.+\.)?goo\.gl/.+#i' => 'google', // Google Maps //'#https?://(.+\.)?google\.com/maps/.+#i' => 'googlemaps', //'#https?://(.+\.)?maps\.google\.com/.+#i' => 'googlemaps', // Google Docs //'#https?://(.+\.)?docs\.google\.com/(.+/)?(document|presentation|spreadsheets|forms|drawings)/.+#i' => 'googledocs', // Twitch.tv //'#https?://(.+\.)?twitch\.tv/.+#i' => 'twitch', // Giphy //'#https?://(.+\.)?giphy\.com/gifs/.+#i' => 'giphy', //'#https?://(.+\.)?i\.giphy\.com/.+#i' => 'giphy', //'#https?://(.+\.)?gph\.is/.+#i' => 'giphy', // Wistia //'#https?://(.+\.)?wistia\.com/medias/.+#i' => 'wistia', //'#https?://(.+\.)?fast\.wistia\.com/embed/medias/.+#i\.jsonp' => 'wistia', ]; /** * ======================================== * Make sure the $wp_write global is set. * This fix compatibility with JetPack, Classical Editor and Disable Gutenberg. JetPack makes * the oembed_providers filter be called and this activates our class too, but one dependency * of the rest_url method is not loaded yet. */ global $wp_rewrite; if (!class_exists('\\WP_Rewrite')) { $path = ABSPATH . WPINC . '/class-wp-rewrite.php'; if (file_exists($path)) { require_once $path; } } if (!is_object($wp_rewrite)) { $wp_rewrite = new \WP_Rewrite(); $_GLOBALS['wp_write'] = $wp_rewrite; } /*========================================*/ foreach ($newProviders as $url => &$data) { $data = [ rest_url('embedpress/v1/oembed/' . $data), true, ]; } $providers = array_merge($providers, $newProviders); return $providers; } /** * Register OEmbed Rest Routes */ public function registerOEmbedRestRoutes() { register_rest_route( 'embedpress/v1', '/oembed/(?P<provider>[a-zA-Z0-9\-]+)', [ 'methods' => \WP_REST_Server::READABLE, 'callback' => ['\\EmbedPress\\RestAPI', 'oembed'], 'permission_callback' => '__return_true', ] ); register_rest_route( 'embedpress/v1', '/oembed/(?P<provider>[a-zA-Z0-9\-]+)', [ 'methods' => \WP_REST_Server::CREATABLE, 'callback' => ['\\EmbedPress\\RestAPI', 'oembed'], 'permission_callback' => '__return_true', ] ); } public function send_user_feedback_email($params) { $params = $params->get_params(); $site_name = get_bloginfo('name'); $site_url = get_site_url(); $admin_email = get_option('admin_email'); $wp_version = get_bloginfo('version'); $admin_user = get_user_by('ID', 1); if ($admin_user) { $first_name = get_user_meta($admin_user->ID, 'first_name', true); $last_name = get_user_meta($admin_user->ID, 'last_name', true); $admin_full_name = trim("$first_name $last_name"); // Fallback to display name if full name is not set if (empty($admin_full_name)) { $admin_full_name = $admin_user->display_name; } } else { $admin_full_name = 'Unknown'; } $to = 'akash@wpdeveloper.com, rasel@wpdeveloper.com, nahid@wpdeveloper.com, md-nahid-hasan@wpdeveloper.com'; // Replace with the recipient's email $subject = '[IMPORTANT] New feedback received from an EmbedPress user.'; // HTML Email Template $message = '<html><body style="font-family: Arial, sans-serif; padding: 20px;">'; $message .= '<div style="max-width: 600px; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); margin: auto;">'; $message .= '<div style="text-align: center; padding-bottom: 20px; border-bottom: 1px solid #ddd">'; $message .= '<img src="https://embedpress.com/wp-content/uploads/2025/03/logo.png" alt="EmbedPress" style="max-width: 150px;">'; $message .= '</div>'; $message .= '<h2 style="font-family: system-ui; color: #333; text-align: center;">Feedback Overview</h2>'; $message .= '<table style="font-family: system-ui; width: 100%; border-collapse: collapse; border: 1px solid #ddd">'; // Email $message .= '<tr><td style="padding: 10px; font-weight: bold; width: 100px; border-bottom: 1px solid #ddd;">Email :</td>'; $message .= '<td style="padding: 10px; border-bottom: 1px solid #ddd;"><a href="mailto:' . esc_attr($params['email']) . '">' . esc_html($params['email']) . '</a></td></tr>'; // Rating $message .= '<tr><td style="padding: 10px; font-weight: bold; width: 100px; border-bottom: 1px solid #ddd;">Rating :</td>'; $message .= '<td style="padding: 10px; border-bottom: 1px solid #ddd;">' . esc_html($params['rating']) . ' ⭐️</td></tr>'; // User $message .= '<tr><td style="padding: 10px; font-weight: bold; width: 100px; border-bottom: 1px solid #ddd;">Name :</td>'; $message .= '<td style="padding: 10px; border-bottom: 1px solid #ddd; font-weight: 500;">' . esc_html($admin_full_name) . '</td></tr>'; // Pack $message .= '<tr><td style="padding: 10px; font-weight: bold; width: 100px; border-bottom: 1px solid #ddd;">Site Url :</td>'; $message .= '<td style="padding: 10px; border-bottom: 1px solid #ddd;"><a target="_blank" href="' . esc_url($site_url) . '" style="color: blue;">' . esc_html($site_url) . '</a></td></tr>'; // Feedback $message .= '<tr><td style="padding: 10px; font-weight: bold; width: 100px; display: flex;">Feedback :</td>'; $message .= '<td style="padding: 10px;">' . nl2br(esc_html($params['message'])) . '</td></tr>'; $message .= '</table>'; $message .= '</div></body></html>'; $headers = [ 'Content-Type: text/html; charset=UTF-8', 'From: ' . esc_html($params['name']) . ' <' . esc_html($params['email']) . '>' ]; // Send the email $sent = wp_mail($to, $subject, $message, $headers); if ($sent) { update_option('embedpress_feedback_submited', true); return new \WP_REST_Response(['message' => 'Email sent successfully!'], 200); } else { return new \WP_REST_Response(['message' => 'Failed to send email.'], 500); } } public function register_feedback_email_endpoint() { register_rest_route('embedpress/v1', '/send-feedback', [ 'methods' => 'POST', 'callback' => [$this, 'send_user_feedback_email'], 'permission_callback' => '__return_true' ]); } /** * Callback called right after the plugin has been activated. * * @return void * @since 1.0.0 * @static * */ public static function onPluginActivationCallback() { $dirname = wp_get_upload_dir()['basedir'] . '/embedpress'; if (!file_exists($dirname)) { mkdir($dirname, 0777); } flush_rewrite_rules(); embedpress_schedule_cache_cleanup(); } /** * Callback called right after the plugin has been deactivated. * * @return void * @since 1.0.0 * @static * */ public static function onPluginDeactivationCallback() { flush_rewrite_rules(); embedpress_cache_cleanup(); $timestamp = wp_next_scheduled('embedpress_backup_cleanup_action'); if ($timestamp) { wp_unschedule_event($timestamp, 'embedpress_backup_cleanup_action'); } } /** * Method that retrieves all additional service providers defined in the ~<plugin_root_path>/providers.php file. * * @return array * @since 1.0.0 * @static * */ public static function getAdditionalServiceProviders() { $additionalProvidersFilePath = EMBEDPRESS_PATH_BASE . 'providers.php'; if (file_exists($additionalProvidersFilePath)) { include $additionalProvidersFilePath; if (isset($additionalServiceProviders)) { return apply_filters('embedpress_additional_service_providers', $additionalServiceProviders); } } return apply_filters('embedpress_additional_service_providers', []); } /** * Method that checks if an embed of a given service provider can be responsive. * * @param string $serviceProviderAlias The service's slug. * * @return boolean * @since 1.0.0 * @static * */ public static function canServiceProviderBeResponsive($serviceProviderAlias) { return in_array($serviceProviderAlias, [ "dailymotion", "kickstarter", "rutube", "ted", "vimeo", "youtube", "ustream", "google-docs", "animatron", "amcharts", "on-aol-com", "animoto", "videojug", 'issuu', ]); } /** * Method that retrieves the plugin settings defined by the user. * * @return object * @since 1.0.0 * @static * */ public static function getSettings() { // Fetch settings from the database $settings = get_option(EMBEDPRESS_PLG_NAME); // If the settings are not an array (it might return false), initialize as an empty array if (!is_array($settings)) { $settings = []; } // Default values if settings are missing if (!isset($settings['enablePluginInAdmin'])) { $settings['enablePluginInAdmin'] = true; } if (!isset($settings['enablePluginInFront'])) { $settings['enablePluginInFront'] = true; } if (!isset($settings['enableGlobalEmbedResize'])) { $settings['enableGlobalEmbedResize'] = false; } if (!isset($settings['enableEmbedResizeHeight'])) { $settings['enableEmbedResizeHeight'] = 550; // old 552 } if (!isset($settings['enableEmbedResizeWidth'])) { $settings['enableEmbedResizeWidth'] = 600; // old 652 } return (object) $settings; } /** * Retrieve all registered plugins. * * @return array * @since 1.4.0 * @static * */ public static function getPlugins() { return self::$plugins; } /** * Handle links displayed below the plugin name in the WordPress Installed Plugins page. * * @return array * @since 1.4.0 * @static * */ public static function handleActionLinks($links, $file) { $settingsLink = '<a href="' . admin_url('admin.php?page=embedpress') . '" aria-label="' . __( 'Open settings page', 'embedpress' ) . '">' . __('Settings', 'embedpress') . '</a>'; array_unshift($links, $settingsLink); if (!apply_filters('embedpress/is_allow_rander', false)) { $links[] = '<a href="https://wpdeveloper.com/in/upgrade-embedpress" target="_blank" class="embedpress-go-pro-action" style="color: green">' . __('Go Pro', 'embedpress') . '</a>'; } return $links; } /** * Method that ensures the API's url are whitelisted to WordPress external requests. * * @param boolean $isAllowed * @param string $host * @param string $url * * @return boolean * @since 1.4.0 * @static * */ public static function allowApiHost($isAllowed, $host, $url) { if ($host === EMBEDPRESS_LICENSES_API_HOST) { $isAllowed = true; } return $isAllowed; } public function extended_mime_types($mimes) { $mimes['ppsx'] = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'; return $mimes; } }